精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

為什么 ElasticSearch 比 MySQL 更適合復雜條件搜索

數據庫 MySQL
Elasticsearch 是開源的實時分布式搜索分析引擎,內部使用 Lucene 做索引與搜索。它提供"準實時搜索"能力,并且能動態集群規模,彈性擴容。

 [[382143]]

本文轉載自微信公眾號「程序員歷小冰」,作者歷小冰。轉載本文請聯系程序員歷小冰公眾號。

熟悉 MySQL 的同學一定都知道,MySQL 對于復雜條件查詢的支持并不好。MySQL 最多使用一個條件涉及的索引來過濾,然后剩余的條件只能在遍歷行過程中進行內存過濾,對這個過程不了解的同學可以先行閱讀一下《MySQL復雜where條件分析》。

上述這種處理復雜條件查詢的方式因為只能通過一個索引進行過濾,所以需要進行大量的 I/O 操作來讀取行數據,并消耗 CPU 進行內存過濾,導致查詢性能的下降。

而 ElasticSearch 因其特性,十分適合進行復雜條件查詢,是業界主流的復雜條件查詢場景解決方案,廣泛應用于訂單和日志查詢等場景。

下面我們就一起來看一下,為什么 ElasticSearch 適合進行復雜條件查詢。

ElasticSearch 簡介

Elasticsearch 是開源的實時分布式搜索分析引擎,內部使用 Lucene 做索引與搜索。它提供"準實時搜索"能力,并且能動態集群規模,彈性擴容。

Elasticsearch 使用 Lucene 作為其全文搜索引擎,用于處理純文本的數據,但 Lucene 只是一個庫,提供建立索引、執行搜索等接口,但不包含分布式服務,這些正是 Elasticsearch 做的。

下面,我們來介紹一下 ElasticSearch 的相關概念。為了便于初學者理解,我們先將 ElasticSearch 中的概念和 MySQL 中的概念大致地進行對應。但是二者在具體細節上還是有很多差異的,大家深入了解 ElasticSearch 就會將二者區分清楚,不能強行對比等同。

  • ElasticSearch 中的索引 Index 類似于 MySQL 中的數據庫 Database;
  • ElasticSearch 中的類型 Type 類似于 MySQL 中的表 Table;需要注意,這個概念在 7.x 版本中被完全刪除,而且概念上和 Table 也有較大差異;
  • ElasticSearch 中的文檔 Document 類似于 MySQL 中的數據行 Row,每個文檔由多個字段 Filed 組成,這個Filed 就類似于 MySQL 的 Column;
  • ElasticSearch 中的映射 Mapping 是對索引庫中的索引字段及其數據類型進行定義,類似于關系型數據庫中的表結構 Schema;
  • ElasticSearch 使用自己的領域語言 Query DSL 來進行增刪改查,而 MySQL 使用 SQL 語言進行上訴操作。
  • ElasticSearch 還有一系列有關其分布式特性的概念,我們這里就暫不介紹了,等后續學習到其分布式特性時在進行介紹。

倒排索引

MySQL 有 B+ 樹索引,而 ElasticSearch 則是倒排索引 (Inverted Index),它通過倒排索引來實現比 MySQL 更快的過濾和復雜條件的查詢,此外,全文搜索功能也是依賴倒排索引才能實現。下面,我們就具體來看一下何為倒排索引。

倒排索引按照維基百科的描述,是存儲文檔內容到文檔位置映射關系的數據庫索引結構。不過只看定義,我是有點迷惑,這不是和 MySQL 的非主鍵索引類似嘛,為什么要叫它“倒排”呢?這個問題我目前也為搞清楚,可能要等到后續了解了其具體實現才能理解。

我們還是以書籍檢索為例,假設有以下數據,每一行就是一個 Document,每個 Document 由 id,ISBN 號,作者名稱和評分組成。

給上述數據按照 ISBN 和 Author 建立的倒排索引如下所示。倒排索引是每個字段分開建立的,相互獨立。有兩個專門的術語,分別是索引 Term 和倒排表 Posting List。字段的值就是 Term,比如 N0007,而 Term 對應的文檔 ID 的列表就是 Posting List,對應圖中紅色的部分。

一般 Term 都是按照順序排序的,比如 Author 名稱就是按照字母序進行了排序,排序之后,當我們搜索某一個 Term 時,就不需要從頭遍歷,而是采用二分查找。一系列排序后的 Term 就組成了索引表 Term Dictionary。

但是 Term Dictionary 往往很大,無法完整放入內存,這是為了更快的查詢,還需要再給它創建索引,也就是 Term Index 。

ElasticSearch 使用 Burst-Trie 結構來實現 Term Index,它是一種前綴樹 Trie 的一種變種,它主要是將后綴進行了壓縮,降低了Trie的高度,從而獲取更好查詢性能。

Term Index 并不需要像 MySQL 的索引一樣,包含所有的 Term,而是包含的是這些 Term 的前綴。它就類似于字典的查詢目錄,可以進行快速定位到 Term Dictionary 的某一位置,然后再從這個位置向后查詢。

綜上, Alice,Alf,Arlan,Bob,Tom 等詞的倒排索引如下所示。綠色部分是 Term Index,藍色部分是 Term Dictionary,紅色部分是 Posting List。

一般來說,Term Index 都是全部緩存在內存中,查詢時,先通過其快速定位到 Term Dictionary 對應的大致范圍,然后再進行磁盤讀取查找對應的 Term,這樣就大大減少了磁盤 I/O 的次數。

聯合索引查詢

了解了 ElasticSearch 的倒排索引后,我們再來看看其如何處理復雜的聯合索引查詢。比如上述書籍例子中,我們需要查詢評分等于2.2并且作者名稱叫 Tom的書籍。

理論上,我們只需要分別按照 Score 和 Author 字段的倒排索引進行查詢,獲取響應的 Posting List,再將其做交集合并即可。

這里又要吐槽一下 MySQL,它是不支持這個合并操作的,它只能按照一個字段的索引進行查詢,然后根據另外一個字段的條件做內存過濾。順便說一下,MySQL 的 join 功能也弱爆了,感興趣的同學可以了解一下這篇文章

而 ElasticSearch 則支持使用跳表 Skip List和 Bitset 的方式將數據集進行合并。

  • 使用 Skip List 結構,同時遍歷 Score 和 Author 查詢出來的 Posting List,利用其 Skip List 結構,相互跳躍對比,得出合集。
  • 使用 Bitset 結構,對 Score 和 Author 查詢出來的 Posting List 的值計算出各自的 Bitset,然后進行 AND 操作。

跳表合并策略

ElasticSearch 在存儲 Posting List 數據時,就保存了對應的多級跳表結構響應的數據,這也體現了其空間換時間的基本思想。

這里先介紹一下跳表的基本概念,它其實是一種可以進行二分查找的有序鏈表。跳表在原有的有序鏈表上面增加了多級索引,通過索引來實現快速查找。首先在最高級索引上查找最后一個小于當前查找元素的位置,然后再跳到次高級索引繼續查找,直到跳到最底層為止,通過這種方式,加快了查詢的速度。

比如,按照 Score 查出來的 Posting List 為[2,3,4,5,7,9,10,11],按照 Author 查出來的結果為 [3,8,9,12,13],則二者的跳表結構如下圖所示。

具體合并過程則是先選最短的 posting list,也就是 Author 的結果集,從其最小的一個 id 開始,將其作為當前最大值。然后依次剩余 posting list 中查找大于或等于該值的位置。

比如上述結果集中,先去 Score 結果集中查找 3,找到后,就表明 3是二者的合集元素之一;然后再重新開啟一輪,選取 Author 結果集中 3 的下一個值 8 ,去 Score 結果集查詢 8,發現了大于等于 8 的最小的值是 9 ,所以不可能有共同的值 8,然后再去 Author 結果集查找 9 ,發現其大于等于 9 的最小值是 12,所以再去 Score 結果集中查找大于等于 12的值,發現并不存在;最終得出二者的合集就只有[3]。

在查詢過程中,每個 posting list 都可以根據當前 id 通過 skip list 快速跳過不符合的 id 值,加速整個合并取交集的過程。

ElasticSearch 對于較長的 posting list 也會使用 Frame Of Reference 進行壓縮編碼,減少了磁盤占用,減少了索引尺寸。有關具體存儲結構的實現我們后續再進行細聊。

Bitset 合并策略

ElasticSearch除了使用 skipList 來進行數據磁盤讀取時的合并操作外,還會將一些查詢條件對應的結果集 posting list 進行內存緩存,也就是所謂的 Filter Cache,為了后續再次復用。

為了減少內存緩存所消耗的內存空間大小,ElasticSearch 沒有使用單純的數組和 bitset 來存儲 posting list,而是使用要壓縮效率更高的 Roaring Bitmap。

我們可以先來講一下單純數組或 bitset 數據結構為什么并不使用。比如如下一道較為常見的面試題目:

給定含有40億個不重復的位于[0, 2^32 - 1]區間內的整數的集合,如何快速判定某個數是否在該集合內?

如果我們要使用 unsigned long 數組來存儲它的話,也就需要消耗 40億 * 32 位 = 160 Byte,大致是 16000 MB。

如果要使用位圖 Bitset 來存儲的話,即某個數位于原集合內,就將它對應的位圖內的比特置為1,否則保持為0。這樣只需要消耗 2 ^ 32 位 = 512 MB,這可只有原來的 3.2 % 左右。

但是,Bitset 也有其缺陷,也就是稀疏存儲的問題,比如上述集合并不是 40億,而是只有2,3個,那么 Bitset 中只有少數幾位是1,其他位都是 0,但是它仍然占用了 512 MB。

而 RoaringBitmap 就是為了解決稀疏存儲的問題。下圖就是 RoaringBitmap 的基本原理示意圖。

首先,如上圖所示,計算出32位無符號整數和 65536 的除數和余數。其含義表示,將32位無符號整數按照高16位分桶,即最多可能有2^16=65536個桶,術語懲治為 container。存儲數據時,按照數據的高16位找到 container(找不到就會新建一個),再將低16位放入container中。也就是說,一個 RoaringBitmap 就是很多container的集合。

然后 container 內具體的存儲結構要根據存入其內數據的基數來決定。

  • 基數小于 2 ^ 12 次方即 4096時,使用unsigned short類型的有序數組來存儲,最大消耗空間就是 8 KB。
  • 基數大于 4096 時,則使用大小為 2 ^ 16 次方的普通 bitset 來存儲,固定消耗 8 KB。當然,有些時候也會對 bitset 進行行程長度編碼(RLE)壓縮,進一步減少空間占用。

ElasticSearch 就是使用 Roaring Bitmap 來緩存不同條件查詢出來的 posting list,然后再進行與操作計算出最終結果集。

后記

至此,我們也算了解了 ElasticSearch 為什么比 MySQL 更適合復雜條件查詢,但是有好就有弊,因為為了查詢做了這么多的準備工作,ElasticSearch 的插入速度就會慢于 MySQL,而且數據存入ES后并不是立馬就能檢索到。

 

責任編輯:武曉燕 來源: 程序員歷小冰
相關推薦

2021-04-28 14:50:07

ElasticSearMySQL數據庫

2021-04-21 07:31:01

ElasticSearMySQLCPU

2021-01-15 10:52:10

PythonVBAExcel

2018-10-17 12:34:36

災難恢復云計算數據中心

2024-09-09 04:00:00

GPU人工智能

2010-11-24 10:16:04

Office 365Google Apps

2019-08-21 09:24:45

GPUCPU深度學習

2013-01-29 10:40:26

云環境應用程序開發

2013-01-29 08:43:32

應用程序開發PaaS

2011-12-07 20:43:33

2021-02-22 10:39:10

多云云計算云平臺

2021-03-22 08:29:59

Elasticsear搜索系統

2019-01-31 10:15:14

群聊單聊消息

2025-09-28 01:25:00

2009-11-05 18:50:04

Windows 7上網本

2009-09-04 11:26:00

英特爾虛擬化

2024-04-03 09:23:31

ES索引分析器

2010-07-13 16:15:49

XenServer5.6

2024-04-03 08:28:31

GolangPHP語言

2021-04-27 09:00:00

PythonIDE開發
點贊
收藏

51CTO技術棧公眾號

好吊妞国产欧美日韩免费观看网站| jzzjzzjzz亚洲成熟少妇| 欧美69wwwcom| 欧美精品一区二区三区久久久| 国产精品国产亚洲精品看不卡| 偷拍25位美女撒尿视频在线观看| 日韩**一区毛片| 欧美丰满老妇厨房牲生活| 风间由美一二三区av片| 国产精品蜜月aⅴ在线| 色777狠狠狠综合伊人| 在线观看91精品国产麻豆| 中国丰满熟妇xxxx性| 日韩国产福利| 国产美女一区二区| 日韩美女写真福利在线观看| 在线观看视频你懂得| 国产福利片在线观看| 国产精品色噜噜| 韩国一区二区三区美女美女秀| 中文字幕精品无码亚| 亚洲视频日本| 久久精品91久久香蕉加勒比| 亚洲av片不卡无码久久| 国产精品亚洲综合在线观看| 欧美性猛交xxxx久久久| 亚洲国产精品久久久久久女王| www.亚洲天堂.com| 麻豆精品一区二区| 91高潮精品免费porn| 成人自拍小视频| 国产影视精品一区二区三区| 亚洲国产成人精品一区二区| 亚洲18在线看污www麻豆| 吉吉日韩欧美| 五月激情丁香一区二区三区| 美国av在线播放| 爱爱爱免费视频在线观看| av一区二区三区在线| 91色视频在线导航| 最近中文字幕在线免费观看| 亚洲一级在线| 性欧美xxxx视频在线观看| 国产精品免费人成网站酒店| 日韩精品网站| 中文在线不卡视频| 日本激情小视频| 午夜a一级毛片亚洲欧洲| 日韩欧美激情一区| 久久无码人妻一区二区三区| 99re8精品视频在线观看| 欧美性猛交xxxx乱大交退制版| 免费男同深夜夜行网站| 在线天堂资源www在线污| 亚洲第一久久影院| 久无码久无码av无码| 日本三级韩国三级欧美三级| 亚洲乱码国产乱码精品精的特点 | 国产精品爽黄69天堂a| 免费的毛片视频| 噜噜噜91成人网| 国产z一区二区三区| 久久久黄色大片| 日韩中文字幕一区二区三区| 国产精品对白刺激| 黄色av一区二区| 蜜臀国产一区二区三区在线播放| 国产精品久久久久久久久久久新郎 | 高清视频一区二区三区| 二区三区在线视频| 337p粉嫩大胆噜噜噜噜噜91av| 美媛馆国产精品一区二区| 欧美婷婷久久五月精品三区| 亚洲国产成人在线| 咪咪色在线视频| 女人黄色免费在线观看| 午夜成人免费视频| 欧美性猛交久久久乱大交小说| 国产成人精品一区二区三区视频| 欧美精品v日韩精品v韩国精品v| 午夜影院免费观看视频| 高清精品视频| 亚洲欧美第一页| 蜜臀av免费观看| 日日夜夜亚洲| 亚洲第一偷拍网| 最近中文字幕在线mv视频在线| 久久蜜桃av| 欧美大片在线影院| 9i精品福利一区二区三区| 日本美女一区二区三区| 99久久精品免费看国产一区二区三区 | 另类小说视频一区二区| 91精品免费| 青青青草原在线| 亚洲日穴在线视频| 日本不卡在线观看视频| 四虎成人精品一区二区免费网站| 日韩精品一区二区三区在线播放| 国产精品无码午夜福利| 国产韩国精品一区二区三区| 91精品国产精品| 国产麻豆免费视频| 91丨九色丨蝌蚪富婆spa| 亚洲最新在线| 亚洲美女炮图| 欧美成人精品二区三区99精品| 国产免费看av| 欧美日韩综合| 国产日韩精品在线观看| 青青草手机在线| 一片黄亚洲嫩模| 色乱码一区二区三区在线| 韩国女主播一区二区三区| 日韩一中文字幕| 亚洲 欧美 中文字幕| 国产不卡视频一区| 亚洲一区二区三区在线观看视频| 超碰资源在线| 日韩欧美一区二区三区在线| 国产一区二区三区精品在线| 一本色道久久综合亚洲精品不| 91九色国产视频| 国产精品无码2021在线观看| 午夜视频在线观看一区二区三区| 亚洲五月激情网| 日韩在线观看| 国产精品亚洲片夜色在线| 同心难改在线观看| 香蕉影视欧美成人| 九色91porny| 91精品天堂福利在线观看| 国产精品久久久久久一区二区| 天堂成人在线| 婷婷国产v国产偷v亚洲高清| 国产精品无码自拍| 综合久久久久| 91九色在线视频| 麻豆视频在线| 91麻豆精品91久久久久久清纯| 欧洲性xxxx| 奇米888四色在线精品| 欧美日韩综合网| 暖暖成人免费视频| 亚洲欧美成人网| 少妇一级淫片日本| 国产视频不卡一区| 午夜免费一区二区| 第一sis亚洲原创| 国产日本欧美一区二区三区在线| av网站在线免费播放| 欧美日韩精品二区第二页| 激情高潮到大叫狂喷水| 久久99久久精品欧美| 三年中文高清在线观看第6集| 成人噜噜噜噜| 欧美成人午夜激情视频| 亚洲第一页在线观看| 亚洲午夜三级在线| 一区二区不卡免费视频| 视频一区免费在线观看| 色综合电影网| 伊人久久综合网另类网站| 久久天天躁狠狠躁老女人| 国产日韩欧美一区二区东京热| 亚洲精品国产a| 自拍视频一区二区| 久热国产精品| 宅男噜噜99国产精品观看免费| 国产精品视频首页| 欧美片一区二区三区| 欧日韩在线视频| 色综合天天综合色综合av| 免费看裸体网站| 国内精品久久久久影院色| 美女黄色免费看| 精品在线99| 91九色在线视频| 极品美鲍一区| 中文字幕亚洲第一| 亚洲精品免费在线观看视频| 欧美日在线观看| 最新日韩免费视频| 成人午夜激情片| 国产精品无码一本二本三本色| 久久久久久久久丰满| 国产欧美日韩亚洲| 成人精品国产亚洲| 久久久久免费精品国产| 精品亚洲综合| 精品精品国产高清a毛片牛牛 | 欧美日本韩国一区二区三区视频| 久久久久亚洲AV成人| 91香蕉视频黄| 日韩精品视频网址| 久久久久99| 成人午夜视频免费观看| 国产成人影院| aa成人免费视频| 国产精品第一| 97超碰色婷婷| www国产在线观看| 亚洲日韩中文字幕在线播放| 精品久久久中文字幕人妻| 欧美午夜精品久久久久久人妖| 亚洲二区在线播放| 久久网站热最新地址| 性猛交╳xxx乱大交| 蜜桃久久av一区| 激情综合网婷婷| 1024精品一区二区三区| 最新中文字幕久久| 精品国产aⅴ| 久久精品人成| 成人av影音| 91色视频在线导航| 韩国精品视频在线观看| 欧亚精品在线观看| 青草影视电视剧免费播放在线观看| 国产一区二区三区在线观看视频| 日本国产在线观看| 日韩欧美色综合网站| 国产精品老熟女视频一区二区| 亚洲成av人影院在线观看网| 欧美 日韩 国产 一区二区三区| 91在线国产福利| 亚洲香蕉中文网| 高清日韩电视剧大全免费| 极品粉嫩美女露脸啪啪| 男女激情视频一区| 成人黄色一区二区| 视频一区欧美日韩| 成人黄色片视频| 国产精品入口| 91av资源网| 午夜在线精品偷拍| 欧美丰满熟妇bbbbbb百度| 亚洲经典三级| 欧美成人高潮一二区在线看| 一区在线免费观看| 日本黄色片一级片| 国内激情久久| 日韩xxxx视频| 日韩天天综合| 久久无码高潮喷水| 麻豆成人精品| 国产精彩免费视频| 日本中文字幕一区二区视频| 九色porny91| 日本va欧美va欧美va精品| 男人操女人免费| 日韩成人一级片| 精品999在线| 久久97超碰色| 最好看的中文字幕| 成人一区二区三区在线观看| 无码国产精品一区二区免费式直播| 成人av资源网站| 国产免费黄色小视频| 亚洲一级一区| 久久久久久久久久久视频| 国产视频一区在线观看一区免费| 欧美亚洲国产成人| 日韩电影一二三区| 中文字幕第66页| 成人黄页在线观看| 伊人网在线视频观看| 国产精品女同互慰在线看| 四虎精品免费视频| 亚洲成av人片一区二区| 国产婷婷色一区二区在线观看 | 欧美精品www在线观看| а√在线中文网新版地址在线| 欧美整片在线观看| 国精品产品一区| 国产激情美女久久久久久吹潮| 欧美三级电影在线| 天堂一区二区三区| 欧美人成在线| 99久久激情视频| 国内一区二区视频| 成熟妇人a片免费看网站| 久久精品综合网| 国产1区2区3区4区| 精品成人av一区| 一级α片免费看刺激高潮视频| 精品欧美乱码久久久久久| 免费在线观看一级毛片| 久久天堂电影网| 唐人社导航福利精品| 成人日韩av在线| 亚洲春色h网| 天天综合中文字幕| 亚洲综合好骚| 91精产国品一二三| 欧美国产一区二区| 久久久久久久国产精品毛片| 在线一区二区三区四区| 亚洲第一视频在线| 日韩中文字幕免费视频| 黄色漫画在线免费看| 成人女保姆的销魂服务| 精品一区在线| 国产精品久久..4399| 精品一区二区三区影院在线午夜 | 亚洲老妇xxxxxx| 无码人妻丰满熟妇区bbbbxxxx| 日韩美女一区二区三区| jzzjzzjzz亚洲成熟少妇| 38少妇精品导航| 一区二区三区欧洲区| 亚洲美女网站18| 乱码第一页成人| 欧产日产国产精品98| 亚洲欧美色综合| 中国一区二区视频| 国产午夜精品久久久 | 性做久久久久久| www.蜜桃av.com| 久久久久北条麻妃免费看| 成人在线爆射| 鲁片一区二区三区| 亚洲福利免费| 日韩黄色一区二区| 亚洲欧美日韩一区| 国产精品无码一区二区桃花视频 | 蜜臀av国产精品久久久久| 800av在线播放| 亚洲国产日产av| www.97超碰| 欧美日韩国产va另类| 亚洲精品tv| 伊甸园精品99久久久久久| 日韩精品久久理论片| 中文字幕免费高清| 91久久精品一区二区三区| 青青久草在线| 国产成人精品最新| 久9久9色综合| 亚洲乱码国产一区三区| 久久综合色播五月| 中文字幕国产在线观看| 亚洲精品在线91| 免费观看欧美大片| 日韩av一区二区三区美女毛片| 免费日韩av片| 国产精品20p| 欧美亚洲高清一区二区三区不卡| 国际av在线| 国产精品三级美女白浆呻吟| 日韩精品一卡| 国产一级片中文字幕| 亚洲乱码国产乱码精品精98午夜| 精品国产区一区二| 久久久久久18| 日韩精品福利一区二区三区| 精品中文字幕av| 国产欧美精品日韩区二区麻豆天美| 波多野结衣毛片| 日韩亚洲欧美中文在线| 国产电影一区二区| 日本男女交配视频| 久久综合99re88久久爱| 色屁屁影院www国产高清麻豆| 永久免费毛片在线播放不卡| 亚洲精品tv| 波多野结衣综合网| 国产日本一区二区| 一级欧美一级日韩| 欧美日韩成人精品| 日韩影视在线观看| www.欧美日本| 亚洲精品视频在线| 天堂av手机版| 国产精品91久久久久久| 五月天久久网站| 欧美做受高潮中文字幕| 日韩欧美在线第一页| 欧美一区二区三区在线观看免费| 99久久精品久久久久久ai换脸| 亚洲综合欧美| 疯狂试爱三2浴室激情视频| 欧美精品一区二区三| 欧美aaa视频| 狠狠精品干练久久久无码中文字幕| 99久久精品国产毛片| 一级黄色大毛片| 97人人做人人爱| 99久久夜色精品国产亚洲狼| 黄色性视频网站| 欧美视频在线一区| 国产又色又爽又黄刺激在线视频| 日韩av手机在线观看| 999久久久国产精品| www.17c.com喷水少妇| 欧美性淫爽ww久久久久无| 超碰在线资源| 一级特黄录像免费播放全99| zzijzzij亚洲日本少妇熟睡| 亚洲天堂网在线视频|