伊人色综合久久天天人手人婷-污视频导航-亚洲 欧美 偷拍 卡通 变态-一区国产传媒国产精品-国产一级淫片a视频免费观看-久久大香伊蕉在人线观看热-日韩一级免费大片-99国产精品久久不卡毛片-欧洲美熟女乱又伦av影片-婷婷综合久久狠狠色99h-日本三级理论久久人妻电影-国产77777-日本少妇寂寞少妇aaa-91国偷自产一区二区介绍-成人免费观看做爰视频ⅹxx-九九超碰

首頁 >深度 >

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

伊人色综合久久天天人手人婷-污视频导航-亚洲 欧美 偷拍 卡通 变态-一区国产传媒国产精品-国产一级淫片a视频免费观看-久久大香伊蕉在人线观看热-日韩一级免费大片-99国产精品久久不卡毛片-欧洲美熟女乱又伦av影片-婷婷综合久久狠狠色99h-日本三级理论久久人妻电影-国产77777-日本少妇寂寞少妇aaa-91国偷自产一区二区介绍-成人免费观看做爰视频ⅹxx-九九超碰
  • <dl id="owamw"><acronym id="owamw"></acronym></dl>
    <dl id="owamw"></dl>
  • <bdo id="owamw"></bdo>
    <button id="owamw"></button>
    <dl id="owamw"></dl>
    <li id="owamw"></li>
    <button id="owamw"><input id="owamw"></input></button>
  • <rt id="owamw"><acronym id="owamw"></acronym></rt>
    <rt id="owamw"></rt>
    2018国产在线| √天堂资源在线| 欧美黑人经典片免费观看| 黄色三级视频在线播放| 污视频免费在线观看网站| 无码人妻精品一区二区三区在线| 国产一区一区三区| 欧美精品无码一区二区三区| 在线免费观看视频黄| 免费看av软件| 中文字幕永久有效| 黄色一级大片在线观看| 青青草综合在线| 国产探花在线观看视频| 亚洲人辣妹窥探嘘嘘| 妺妺窝人体色www在线小说| 在线观看污视频| 日本道在线视频| www亚洲国产| 亚洲色婷婷久久精品av蜜桃| 亚洲 欧洲 日韩| 爱爱爱视频网站| 草草草视频在线观看| 一二三四中文字幕| 欧美精品自拍视频| 激情六月丁香婷婷| 国产九九在线观看| 深夜做爰性大片蜜桃| 国产91av视频在线观看| 日韩av新片网| 日本人视频jizz页码69| 日本一道在线观看| 精品人妻少妇一区二区| 91极品视频在线观看| 欧美性视频在线播放| 高清欧美精品xxxxx| 久久国产色av免费观看| 波多野结衣激情| 成人在线免费观看av| 一个色综合久久| www国产黄色| 在线观看17c| www.久久91| 日韩久久一级片| 玩弄中年熟妇正在播放| 亚洲在线观看网站| 日本中文字幕高清| 日本中文字幕亚洲| 国内自拍中文字幕| 国产成人美女视频| wwwwxxxx日韩| 亚洲黄色a v| 日韩av手机版| 97超碰成人在线| 九一精品在线观看| 国产成人在线综合| 日韩av卡一卡二| 欧美日韩中文在线视频| 免费看又黄又无码的网站| 中文字幕在线视频一区二区| 中文字幕第66页| 男人草女人视频| 国内精品在线观看视频| 欧美牲交a欧美牲交aⅴ免费真| 亚洲熟妇av日韩熟妇在线| 黄色一级在线视频| 亚洲福利精品视频| 日本久久高清视频| 人人干视频在线| 8x8x最新地址| 99久久99久久精品| 妺妺窝人体色www在线小说| 日韩精品视频一二三| 福利在线一区二区| 免费av不卡在线| 国产aaa一级片| 中文字幕在线中文| 日本网站在线看| 日韩免费毛片视频| 18禁免费观看网站| 五月天综合婷婷| 青青在线视频免费| 成年丰满熟妇午夜免费视频| 亚洲综合欧美在线| 国产天堂在线播放| 亚洲精品高清无码视频| 精品嫩模一区二区三区| 在线a免费观看| 性生生活大片免费看视频| 91女神在线观看| 小明看看成人免费视频| 亚洲欧美自偷自拍另类| 午夜激情在线观看视频| 天天干在线影院| 午夜视频在线网站| 91免费网站视频| 国产大尺度在线观看| www亚洲国产| 日韩精品一区二区免费| 69堂免费视频| 亚洲最大综合网| 天天干天天色天天爽| 99热这里只有精品免费| 免费无码不卡视频在线观看| 伊人成色综合网| 日韩欧美亚洲另类| av日韩一区二区三区| 白嫩少妇丰满一区二区| 手机视频在线观看| 久久99中文字幕| 爱豆国产剧免费观看大全剧苏畅| 久久艹国产精品| gai在线观看免费高清| 人妻少妇精品久久| 在线免费看v片| 日韩在线xxx| 日本精品久久久久久久久久| 国产性生活一级片| 女人帮男人橹视频播放| www.日本久久| 国产一级不卡毛片| 欧美激情成人网| 国产精品va无码一区二区| 免费人成自慰网站| av不卡在线免费观看| mm131亚洲精品| 国产免费视频传媒| 亚洲国产精品毛片av不卡在线| 国产手机免费视频| 人妻av中文系列| 日本香蕉视频在线观看| 国产性生活免费视频| 日日噜噜噜夜夜爽爽| а 天堂 在线| 日本丰满少妇黄大片在线观看| 日本久久高清视频| www.国产在线播放| 又色又爽又高潮免费视频国产| 日韩精品一区二区三区久久| 国产情侣av自拍| 一级黄色片在线免费观看| 国产精品videossex国产高清| 青青青青在线视频| 欧洲熟妇精品视频| 9l视频自拍9l视频自拍| 99爱视频在线| 中文字幕欧美人妻精品一区| 九色porny自拍| 日本黄色三级大片| xxxxxx在线观看| 亚洲欧美日韩综合网| 日本a在线免费观看| 蜜桃网站在线观看| 少妇网站在线观看| 无码少妇一区二区三区芒果| 精品无码av无码免费专区| 午夜天堂在线视频| 在线免费观看视频黄| 国产熟女高潮视频| 黄页网站大全在线观看| 18黄暴禁片在线观看| 熟女视频一区二区三区| 日本成人xxx| www亚洲国产| 国产真人做爰毛片视频直播| 日本一区二区三区四区五区六区| 91丝袜超薄交口足| 一本—道久久a久久精品蜜桃| 国产免费色视频| youjizz.com在线观看| 玩弄中年熟妇正在播放| 国产精品333| 午夜xxxxx| 欧洲精品一区二区三区久久| www黄色av| 亚洲另类第一页| av不卡在线免费观看| 国产911在线观看| 国产a级片免费观看| √天堂资源在线| 成年网站在线免费观看| 欧美丝袜在线观看| 99爱视频在线| 小说区视频区图片区| 日韩av资源在线| 97超碰在线视| 亚洲精品免费一区亚洲精品免费精品一区 | 日本a级片在线观看| 大肉大捧一进一出好爽视频| 色婷婷一区二区三区在线观看| 99国产精品白浆在线观看免费| 天天爽夜夜爽一区二区三区| av高清在线免费观看| 日韩精品一区二区三区四| 亚洲欧美日韩综合网| 黄色一级二级三级| www黄色av| 午夜久久久精品| www.xxx亚洲| 天天干天天av|