亚洲永久在线_欧美一区影院_国产精品一区亚洲_伊人精品视频_狠久久av成人天堂_午夜精品一区二区三区四区_99在线|亚洲一区二区_久久久久久婷_黄色日韩在线_99热免费精品在线观看

首頁 >深度 >

Elasticsearch之join關聯查詢及使用場景

在Elasticsearch這樣的分布式系統中執行類似SQL的join連接是代價是比較大的,然而,Elasticsearch卻給我們提供了基于水平擴展的兩種連接形式 。這句話摘自Elasticsearch官網,從“然而”來看,說明某些場景某些情況下我們還是可以使用的


【資料圖】

一、join總述

1、關系類比

在關系型數據庫中,以MySQL為例,尤其B端類系統且數據量不是特別大的場景,我們經常用到join關鍵字對有關系的兩張或者多張表進行關聯查詢。但是當數據量達到一定量級時,查詢性能就是經常困擾的問題。由于es可以做到數億量級的秒查(具體由分片數量決定),這時候把數據同步到es是我們可以使用解決方案之一。

那么不禁有疑問問了,由于業務場景的決定,之前必須關聯查詢的兩張表還能做到進行關聯嗎?

答案是可以的,es也提供了類似于關系型數據庫的關聯查詢,但是它又與關系型數據的關聯查詢有明顯的區別與限制。

2、使用場景

如果把關系數據庫原有關聯的兩張表,同步到es后,通常情況下,我們業務開發中會有兩種查詢訴求的場景

場景1

訴求:展示子表維度的明細數據(包含父表和子表中字段的條件)

方案:對于此種查詢訴求,我們可以把原來關聯的父子表打成父子表字段混合在一起的大寬表,既能滿足查詢條件,又有查詢性能的保障,也是常用存儲方案之一

場景2

訴求:展示父表維度的明細數據(包含父表和子表中字段的條件)

方案:然而,對于此種查詢訴求,需要通過子表的條件來查詢出父表的明細結果,場景1的寬表存儲方案是子表明細數據,而最終我們要的是父表明細數據,顯然對于場景1的存儲方案是不能滿足的。如果非要使用場景1的存儲方案,我們還要對寬表結果進行一次groupby或者collapse操作來得到父表結果。

這個時候我們就可以使用es提供的join功能來完成場景2的訴求查詢,同時它也滿足場景1的訴求查詢

3、使用限制

由于es屬于分布式文檔型數據庫,數據自然是存在于多個分片之上的。Join字段自然不能像關系型數據庫中的join使用。在es中為了保證良好的查詢性能,最佳的實踐是將數據模型設置為非規范化文檔,通過字段冗余構造寬表,即存儲在一個索引中。需要滿足條件如下:

(1)父子文檔(數據)必須存儲在同一index中

(2)父子文檔(數據)必須存儲在同一個分片中,通過關聯父文檔ID關聯

(3)一個index中只能包含一個join字段,但是可以有多個關系

(4)同一個index中,一個父關系可以對應多個子關系,一個子關系只對應一個父關系

4、性能問題

當然執行了join查詢固然性能會受到一定程度的影響。對于帶has_child/has_parent而言,其查詢性能會隨著指向唯一父文檔的匹配子文檔的數量增加而降低。本文開篇第一句摘自es官網描述,從ES官方的描述來看join關聯查詢對性能的損耗是比較大的。

不過,在筆者使用的過程中,在5個分片的前提下,且父表十萬量級,子表數據量在千萬量級的情況下,關聯查詢的耗時還是在100ms內完成的,對于B端許多場景還是可以接受的。

若有類似場景,建議我們在使用前,根據分片的多少和預估未來數據量的大小提前做好性能測試,防止以后數量達到一定程度時,性能有明顯下降,那個時候再改存儲方案得不償失。

二、Mapping

1、舉例說明

這里以優惠券活動與優惠券明細為例,在一個優惠券活動中可以發放幾千萬的優惠券,所以券活動與券明細是一對多的關系。

券活動表字段

字段

說明

activity_id

活動ID

activity_name

活動名稱

券明細表字段

字段

說明

coupon_id

券ID

coupon_amount

券面額

activity_id

外鍵-活動ID

2、mapping釋義

join類型的字段主要用來在同一個索引中構建父子關聯關系。通過relations定義一組父子關系,每個關系都包含一個父級關系名稱和一個或多個子級關系名稱

activity_coupon_field是一個關聯字段,內部定義了一組join關系,該字段為自命名

type指定關聯關系是join,固定寫法

relations定義父子關系,activity父類型名稱,coupon子類型名稱,名稱均為自命名

{

"mappings": {

"properties": {

"activity_coupon_field": {

"type": "join",

"relations": {

"activity": "coupon"

}

},

"activity_id": {

"type": "keyword"

},

"activity_name": {

"type": "keyword"

},

"coupon_id": {

"type": "long"

},

"coupon_amount": {

"type": "long"

}

}

}

}

三、插入數據

1、插入父文檔

在put父文檔數據的時候,我們通常按照某種規則指定文檔ID,方便子文檔數據變更時易于得到父文檔ID。比如這里我們用activity_id的值:activity_100來作為父id

PUT /coupon/_doc/activity_100

{

"activity_id": 100,

"activity_name": "年貨節5元促銷優惠券",

"activity_coupon_field": {

"name": "activity"

}

}

2、插入子文檔

上邊已經指定了父文檔ID,而子表中已經包含有activity_id,所以很容易得到父文檔ID

put子文檔數據時候,必須指定父文檔ID,就是父文檔中的_id,這樣父子數據才建立了關聯關系。與此同時還要指定routing字段為父文檔ID,這樣保證了父子數據在同一分片上。

PUT /coupon/_doc/coupon_12345678?routing=activity_id_100

{

"coupon_id": 12345678,

"coupon_amount": "5",

"activity_id": 100,

"activity_coupon_field": {

"name": "coupon",

"parent": "activity_id_100" //父ID

}

}

四、關聯查詢

1、has_parent查詢(父查子)

根據父文檔條件字段查詢符合條件的子文檔數據

例如:查詢包含“年貨節”活動字樣,且已經被領取過的券

{

"query": {

"bool": {

"must": [{

"parent_type": "activity",

"has_parent": {

"query": {

"bool": {

"must": [{

"term": {

"status": {

"value": 1

}

}

}, {

"wildcard": {

"activity_name": {

"wildcard": "*年貨節*"

}

}

}]

}

}

}

}]

}

}

}

2、has_child查詢(子查父)

根據子文檔條件字段符合條件的父文檔數據

例如:查詢coupon_id=12345678在那個存在于哪個券活動中

{

"query": {

"bool": {

"must": [{

"has_child": {

"type": "coupon",

"query": {

"bool": {

"must": [{

"term": {

"coupon_id": {

"value": 12345678

}

}

}]

}

}

}

}]

}

}

}

參考:Joining queries | Elasticsearch Guide [7.9] | Elastic

以上文中如有不正之處歡迎留言指正

作者:京東零售 李振乾
內容來源:京東云開發者社區

關鍵詞:

責任編輯:Rex_30

亚洲永久在线_欧美一区影院_国产精品一区亚洲_伊人精品视频_狠久久av成人天堂_午夜精品一区二区三区四区_99在线|亚洲一区二区_久久久久久婷_黄色日韩在线_99热免费精品在线观看
欧美日一区二区三区在线观看国产免| 国产精品一区在线播放| 亚洲国产日韩在线| 国产欧美一区二区三区另类精品| 国产日韩高清一区二区三区在线| 亚洲伊人网站| 欧美福利电影在线观看| 伊人影院久久| 久久精品首页| 亚洲高清视频在线观看| 男人的天堂亚洲在线| 精品电影一区| 欧美在线高清| 99xxxx成人网| 欧美日韩精品免费观看| 一区二区三区欧美成人| 欧美久久一级| 亚洲欧美卡通另类91av| 国产精品mm| 久久精品日产第一区二区| 亚洲精品麻豆| 国产综合欧美| 欧美激情亚洲| 久久久精品性| 亚洲在线黄色| 国产精品美女久久久| 伊人成人网在线看| 亚洲手机在线| 韩国av一区| 国产尤物精品| 欧美日韩国产色综合一二三四| 性伦欧美刺激片在线观看| 亚洲精品美女91| 激情视频一区二区| 亚洲黑丝一区二区| 亚洲福利精品| 一本色道久久| 国产日韩亚洲欧美精品| 亚洲成人资源| 一区在线电影| 日韩亚洲视频在线| 亚洲深夜av| 国产精品美女黄网| 久久国产高清| 午夜国产精品视频| 狠狠色噜噜狠狠狠狠色吗综合 | 亚洲欧美文学| 久久一区中文字幕| 欧美黄免费看| 韩日精品视频| 99在线热播精品免费99热| 日韩视频不卡| 国产精品资源| 欧美暴力喷水在线| 狠狠入ady亚洲精品经典电影| 亚洲午夜精品久久| 亚洲经典三级| 免费在线国产精品| 欧美午夜不卡影院在线观看完整版免费| 午夜精品视频在线观看一区二区| 国模 一区 二区 三区| 亚洲第一伊人| 国产一区二区久久久| 免费试看一区| 亚洲午夜精品久久久久久app| 99国内精品久久久久久久软件| 国产欧美日韩一区二区三区| 亚洲一区二区三区精品在线观看| 美女精品一区| 精品动漫3d一区二区三区免费版| 国产精品日韩久久久| 久久精品导航| 日韩一区二区久久| 久久一区视频| 99精品欧美一区二区三区| 欧美综合二区| 亚洲高清在线播放| 欧美在线二区| 国产亚洲精品bv在线观看| 欧美精品三区| 毛片一区二区| 国产一区二区高清| 影院欧美亚洲| 欧美日韩国产亚洲一区| 国产乱码精品| 亚洲激情另类| 欧美少妇一区| 美女精品网站| 国产一区二区三区久久| 亚洲一级影院| 欧美日韩在线一二三| 亚洲一区综合| 亚洲精品在线免费| 好吊日精品视频| 久久亚洲国产精品日日av夜夜| 99pao成人国产永久免费视频| 欧美日韩一区在线播放| 久久综合五月| 久久只有精品| 欧美一区三区二区在线观看| 国产亚洲福利| 国产精品美女黄网| 夜夜爽av福利精品导航| 亚洲欧洲日韩综合二区| 激情久久婷婷| 一区二区自拍| 狠狠色丁香久久综合频道| 欧美在线不卡| 欧美一区二区三区四区在线观看地址 | 欧美日韩视频一区二区三区| 美女精品网站| 久久综合伊人| 久久一区亚洲| 欧美一区成人| 欧美特黄一区| 亚洲午夜一级| 亚洲国产精品一区在线观看不卡| 狠色狠色综合久久| 在线观看日韩av电影| 亚洲国产91| 国产一区二区三区成人欧美日韩在线观看 | 欧美精品1区| 午夜精品国产| 狠狠色狠狠色综合人人| 亚洲激情社区| 先锋影音久久久| 久久久久久九九九九| 久久最新视频| 在线观看日韩av电影| 日韩午夜黄色| 久久亚洲风情| 精品成人国产| 亚洲欧美日韩精品一区二区| 久久另类ts人妖一区二区| 午夜国产精品视频| 亚洲午夜91| 中文精品在线| 欧美一区二区视频在线| 好看的日韩av电影| 国产女主播一区二区| 欧美精选在线| 99精品99久久久久久宅男| 久久精品人人| 日韩亚洲视频| 你懂的国产精品| 亚洲大片在线| 欧美专区18| 国内外成人免费视频| 国产精品试看| 欧美色123| 亚洲欧美日韩一区在线观看| 欧美精品大片| 国产一区二区高清| 黄色国产精品| 久久久久看片| 99综合精品| 国产精品红桃| 另类av一区二区| 91久久综合| 欧美日韩免费观看一区=区三区 | 亚洲人成人一区二区三区| 美女诱惑一区| 一区二区精品在线| 精品不卡在线| 欧美国产专区| 久久久久99| 亚洲一区网站| 夜夜爽av福利精品导航| 激情偷拍久久| 亚洲网站视频| 欧美午夜精品理论片a级大开眼界| 国产精品裸体一区二区三区| 亚洲调教视频在线观看| 午夜精品婷婷| 欧美一区高清| 欧美高清不卡| 欧美精品激情| 欧美日韩18| 欧美一区精品| 欧美日韩视频| 欧美精品一区二区视频 | 亚洲国产裸拍裸体视频在线观看乱了中文| 久久aⅴ乱码一区二区三区| 99xxxx成人网| 国产伦精品一区二区三区四区免费| 精品不卡视频| 亚洲高清久久| 亚洲人成免费| 国产一区二区高清视频| 亚洲看片一区| 国产精品日韩一区二区三区| 中文精品视频一区二区在线观看| 亚洲经典视频在线观看| 一本色道88久久加勒比精品| 国产日韩欧美一区在线 | 在线天堂一区av电影| 亚洲精品日韩精品| 99精品欧美一区二区三区| 91久久黄色| 国产美女一区| 欧美成人日本| 亚洲成色最大综合在线| 亚洲精品婷婷| 久久国产精品一区二区三区| 久久亚洲国产精品日日av夜夜| 蜜桃av综合| 欧美日韩国产亚洲一区| 亚洲午夜高清视频| 一区二区三区成人精品| 蜜桃久久av| 亚洲香蕉网站| 国产精品美女xx| 欧美91大片| 亚洲国内精品| 久久久夜精品| 精品99视频| 香蕉视频成人在线观看| 欧美日韩一区综合| 国产婷婷精品| 国产一区免费视频| 国产精品永久| 激情视频一区二区| 午夜一区二区三区不卡视频| 国产精品99一区二区| 国产日韩一区欧美| 欧美日韩综合| 久久久久久9| 亚洲人人精品| 欧美精品午夜| 午夜一区在线| 99国内精品| 国模精品娜娜一二三区| 麻豆av一区二区三区| 亚洲精品一区二区三区樱花| 欧美福利视频| 久久福利精品| 中文在线不卡| 亚洲高清网站| 国产精品a级| 欧美在线91| 性xx色xx综合久久久xx| 亚洲麻豆视频| 在线观看亚洲| 欧美午夜a级限制福利片| 噜噜噜在线观看免费视频日韩| 99精品免费视频| 亚洲国产国产亚洲一二三| 欧美日韩一区在线观看视频| 久久人人97超碰国产公开结果| 一区二区动漫| 99av国产精品欲麻豆| 精品1区2区3区4区| 国产一区二区三区四区老人| 另类国产ts人妖高潮视频| 国产精品有限公司| 中文欧美日韩| 一区二区高清视频| 亚洲免费高清| 在线亚洲一区| 在线综合视频| 一区二区三区四区五区精品| 亚洲精品一级| 国产欧美成人| 国产区欧美区日韩区| 国产午夜久久| 亚洲一区二区在| 香蕉亚洲视频| 欧美在线日韩精品| 国产精品www994| 激情欧美一区| 在线亚洲精品| 翔田千里一区二区| 欧美成人日本| 韩国精品一区二区三区| 黄色成人在线网址| 99热在线精品观看| 国产精品视频久久一区| 亚洲欧美日韩综合国产aⅴ| 久久xxxx精品视频| 欧美区亚洲区| 亚洲久久视频| 久久久久网址| 欧美午夜视频| 亚洲精品美女| 美女网站久久| 海角社区69精品视频| 亚洲精品激情| 欧美福利电影在线观看| 1024日韩| 久热综合在线亚洲精品| 影音先锋久久精品| 嫩草成人www欧美| 国内不卡一区二区三区| 国产九区一区在线| 国内精品福利| 亚洲一区3d动漫同人无遮挡| 午夜视频精品| 国产日韩专区| 国产一区二区无遮挡| 亚洲一区网站| 亚洲人成人一区二区三区| 久久久久91| 亚洲精选91| 欧美日韩调教| 亚洲一区自拍| 亚洲黄网站黄| 亚洲欧美综合一区| 国产精品午夜av在线| 国内精品久久久久久久影视蜜臀| 亚洲影院免费| 亚洲精品一区二区三| 欧美精品国产一区二区| 国产视频一区在线观看一区免费| 欧美欧美全黄| 久久精品国产99精品国产亚洲性色| 国产综合精品| 午夜亚洲福利| 久久婷婷麻豆| 老鸭窝毛片一区二区三区| 亚洲伦理精品| 亚洲国产二区| 国内一区二区三区| 午夜日韩在线| 欧美国产综合| 欧美二区在线| 久久国产精品久久久久久电车| 亚洲国产精品一区制服丝袜| 欧美精品啪啪| 欧美喷水视频| 欧美日韩国产探花| 蜜桃久久av| 久久精品人人做人人爽电影蜜月| 国产欧美日韩一区二区三区在线| 精品动漫3d一区二区三区免费版| 欧美激情 亚洲a∨综合| 久久久久一区二区| 久久亚洲综合网| 欧美在线网站| 欧美精品成人| 欧美日韩mv| 激情欧美一区二区三区| 亚洲午夜高清视频| 亚洲二区在线| 亚洲欧洲另类| 国产日韩专区| 亚洲欧美日韩精品一区二区| 国产欧美在线| 午夜一区二区三视频在线观看 | 亚洲一区三区视频在线观看| 国产精品视频免费一区| 免费亚洲视频| 欧美日韩一区在线播放| 亚洲视频欧美在线| 一本久道久久久| 免费一区二区三区| 欧美另类一区| 亚洲麻豆视频| 久久久久久9| 国模吧视频一区| 一区二区三区三区在线| 久久九九精品| 影音国产精品| 亚洲欧美日韩综合国产aⅴ| 欧美黄色精品| 在线综合亚洲| 午夜日韩激情| 国产日韩欧美一区二区| 狂野欧美一区| 9色国产精品| 欧美激情在线| 国产精品日韩| 欧美日本不卡| 国产伦精品一区二区三区视频孕妇 | 国产一区二区三区久久| 欧美va天堂在线| 中文精品视频| 欧美欧美全黄| 亚洲一区二区在线看| 国产一区二区无遮挡| 国产农村妇女精品一二区| 国产精品国产亚洲精品看不卡15 | 久久人人97超碰国产公开结果| 黄色成人在线网址| 美女精品在线观看| 亚洲国产一区二区三区a毛片| 久久av一区| aa成人免费视频| 国产综合网站| 欧美一区1区三区3区公司| 国内视频精品| 鲁大师影院一区二区三区| 亚洲天堂久久| 欧美日本一区| 久久九九国产| 亚洲在线观看| 99精品欧美| 亚洲人成人一区二区三区| 欧美日韩精品一本二本三本| 美女精品国产| 免费久久久一本精品久久区 |