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

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

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

 熟悉 MySQL 的同學一定都知道,MySQL 對于復雜條件查詢的支持并不好。MySQL 最多使用一個條件涉及的索引來過濾,然后剩余的條件只能在遍歷行過程中進行內存過濾。

上述這種處理復雜條件查詢的方式因為只能通過一個索引進行過濾,所以需要進行大量的 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后并不是立馬就能檢索到。 

 

責任編輯:龐桂玉 來源: Hollis
相關推薦

2021-02-19 08:17:07

MySQL ElasticSea搜索

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

英特爾虛擬化

2010-07-13 16:15:49

XenServer5.6

2024-04-03 09:23:31

ES索引分析器

2018-03-28 14:24:07

安卓蘋果智能家居

2024-04-03 08:28:31

GolangPHP語言
點贊
收藏

51CTO技術棧公眾號

国产自产自拍视频在线观看| 免费激情视频网站| 久久视频精品| 欧美xxx久久| 精品中文字幕av| 91福利在线视频| 成人高清在线视频| 国产成人激情小视频| 在线观看免费黄色网址| 91午夜精品| 欧美影视一区二区三区| 国产传媒久久久| 日本1级在线| 国产一区二区不卡| 国产精品91久久久久久| 久久久美女视频| 日韩理论电影| 日韩精品视频免费在线观看| 亚洲高清在线不卡| 韩国美女久久| 亚洲国产成人91porn| 婷婷久久五月天| 涩爱av在线播放一区二区| 精品午夜一区二区三区在线观看| 97在线视频免费看| 色偷偷www8888| 国产精品一区2区3区| 日韩免费成人网| 日韩成人精品视频在线观看| 亚洲精华液一区二区三区| 一区二区三区日韩精品视频| 色99中文字幕| 四虎精品成人影院观看地址| 国产成人免费高清| 成人免费在线视频网站| 国产suv精品一区二区33| 韩国久久久久| 伦理中文字幕亚洲| 污污视频网站在线免费观看| 精品一区亚洲| 精品视频—区二区三区免费| 美女搡bbb又爽又猛又黄www| 日韩精品一区国产| 91精品在线观看入口| mm131亚洲精品| 成人免费福利| 日本黄色一区二区| 成人免费观看毛片| 亚洲美女尤物影院| 欧美日韩午夜剧场| www.av中文字幕| wwwwxxxx在线观看| 亚洲线精品一区二区三区八戒| 日韩不卡一二区| 91麻豆国产福利在线观看宅福利| 亚洲少妇30p| 欧美三级午夜理伦三级老人| 蜜桃视频在线观看www社区 | 日韩精品一区二区在线观看| 樱花草www在线| 国外成人福利视频| 欧美人与性动xxxx| 日本高清免费在线视频| 国产成人免费av一区二区午夜| 欧美日韩免费观看一区三区| 青青草久久伊人| 不卡一区视频| 欧美mv日韩mv国产网站| 国产精品一区二区在线免费观看| 99久久免费精品国产72精品九九| 亚洲国产日韩欧美在线动漫| 欧美大片免费播放器| 女厕嘘嘘一区二区在线播放 | 鬼打鬼之黄金道士1992林正英| 狠狠综合久久av一区二区| 大美女一区二区三区| 久久久久久草| 三区四区电影在线观看| 亚洲激情自拍偷拍| 日本毛片在线免费观看| 91精品国产经典在线观看| 91精品国产欧美一区二区成人| 国产免费无码一区二区| 人人精品视频| www.日韩.com| 日本学生初尝黑人巨免费视频| 久久精品九九| 成人精品一区二区三区电影黑人| 亚洲乱色熟女一区二区三区| 91美女蜜桃在线| 亚洲精品一区二区三区蜜桃久| 制服丝袜中文字幕在线| 精品日韩视频在线观看| 最新中文字幕2018| 91久久偷偷做嫩草影院电| 精品五月天久久| 青青操在线视频观看| 亚洲高清自拍| 国产精品夜色7777狼人| 丰满少妇高潮在线观看| 久久色成人在线| 狠狠干视频网站| 美女一区网站| 日韩精品中文字幕在线不卡尤物| 97人妻精品一区二区免费| 99精品在线免费在线观看| 国模私拍视频一区| 国产精品高潮呻吟久久久| 99re这里只有精品首页| 国产盗摄视频在线观看| 成人做爰视频www网站小优视频| 日韩精品在线一区二区| 91动漫免费网站| 99精品国产99久久久久久福利| 国产免费一区二区三区在线观看| 欧美一级在线免费观看| 日韩一区有码在线| 不卡av免费在线| 欧美日韩一区二区三区不卡视频| 草民午夜欧美限制a级福利片| 国产一级一级国产| 成人自拍视频在线| 在线播放 亚洲| 亚洲天堂一区二区| 亚洲精品99久久久久| 欧洲猛交xxxx乱大交3| 免费高清在线一区| 日产精品高清视频免费| 爱啪啪综合导航| 日韩欧美一区二区免费| 美女视频久久久| 青青草97国产精品免费观看无弹窗版 | 亚洲精品自在在线观看| 人人鲁人人莫人人爱精品| 日韩高清中文字幕| 国产精品7777| 豆国产96在线|亚洲| 欧美日韩一级在线| 国产一区2区在线观看| 色阁综合伊人av| 中文字幕免费观看视频| 国产亚洲va综合人人澡精品| 亚洲色成人一区二区三区小说| 欧美自拍视频| 91精品成人久久| 日韩在线视频观看免费| 亚洲午夜激情网页| caopor在线| 亚洲精品看片| 久久草.com| 综合另类专区| 亚洲性猛交xxxxwww| 无码人妻精品一区二区| 久久精品在这里| 亚洲一二三区av| 99久久精品费精品国产| 91精品国产综合久久久久久蜜臀| 日本视频在线观看| 在线成人小视频| 欧美日韩偷拍视频| 成人永久aaa| 五月丁香综合缴情六月小说| 欧美日韩精品一区二区三区在线观看| 国产91精品久| 成人免费黄色网页| 欧美日韩一区二区欧美激情| 免费在线观看a级片| 国产精品一区二区在线观看不卡| 日韩成人手机在线| 日本中文字幕在线一区| 国产精品99久久久久久白浆小说 | 国产视频一区二区三区四区五区| 亚洲欧美另类综合偷拍| 欧美一级片在线免费观看| 99成人在线| 日韩欧美精品在线不卡| 国产精品成人**免费视频| 欧美激情视频一区| 天堂在线中文资源| 欧美日韩国产电影| 久久黄色免费网站| 久久久精品tv| 樱花草www在线| 国产日韩高清一区二区三区在线| 色一情一区二区三区四区| 91精品麻豆| 96精品视频在线| 在线观看黄av| 亚洲第一精品夜夜躁人人爽| 蜜臀99久久精品久久久久小说| 亚洲欧美激情小说另类| 亚洲乱码国产乱码精品精大量| 美女网站色91| 国产黄色片免费在线观看| 欧洲grand老妇人| 成人国产一区二区| 澳门av一区二区三区| 欧美日本精品在线| 在线观看av黄网站永久| 亚洲激情 国产| 91精品国产乱码久久| 欧美日韩国产精品专区| 久久精品亚洲a| 久久人人爽爽爽人久久久| 国产资源中文字幕| 日本 国产 欧美色综合| 分分操这里只有精品| 欧美aaaa视频| 蜜桃成人在线| 精品午夜电影| 亚洲一区二区免费在线| www.国产精品| 欧美在线视频观看免费网站| 在线观看操人| 中文字幕一区二区精品| 亚洲av片在线观看| 日韩一级二级三级| 一级黄色大片网站| 精品福利在线看| 免费一级片在线观看| ...xxx性欧美| 中文字幕黄色网址| 久久女同精品一区二区| 高清中文字幕mv的电影| 国产综合色视频| 亚洲综合婷婷久久| 日本美女一区二区三区视频| 浮妇高潮喷白浆视频| 欧美精品播放| mm131午夜| 91精品天堂福利在线观看 | 99reav在线| 亚洲欧洲日产国产网站| 亚洲aⅴ乱码精品成人区| 欧美成人性福生活免费看| 国产精品视频a| 欧美日韩免费观看一区二区三区 | 欧美bbbbb| 成年人免费大片| 亚洲男女自偷自拍| av之家在线观看| 一区二区精品| 久在线观看视频| 国产亚洲欧洲| 国产91在线免费| 亚洲欧美日韩专区| 国产精品333| 小嫩嫩精品导航| 欧美牲交a欧美牲交aⅴ免费真 | 亚洲欧美激情一区二区| 国产精品白丝喷水在线观看| 国产精品久久久久国产精品日日| 国产探花视频在线播放| 国产精品美女久久久久久2018| 色欲AV无码精品一区二区久久| 国产精品色噜噜| 日韩在线一卡二卡| 亚洲人成精品久久久久| 久久久久人妻一区精品色欧美| 一区二区三区精品在线观看| 国产污视频在线看| 欧美视频一二三| 无码无套少妇毛多18pxxxx| 欧美三级日本三级少妇99| 亚洲一级特黄毛片| 日韩欧美精品在线| 婷婷开心激情网| 亚洲天堂免费在线| 欧美被日视频| 欧美大片欧美激情性色a∨久久| 久久免费电影| 日产精品99久久久久久| 成人全视频在线观看在线播放高清| 国产主播喷水一区二区| 亚洲不卡在线| 久久久久综合一区二区三区| 欧美色图国产精品| 可以在线看黄的网站| 日韩视频中文| 美女在线视频一区二区| 国产99精品国产| 中文字幕免费高清| 中文字幕五月欧美| 亚洲一区 视频| 欧美日韩一区精品| 亚洲精品久久久久久久久久 | 精品日本一区二区三区| 成人免费电影网址| 亚洲理论电影在线观看| 日韩经典中文字幕一区| 在线免费黄色小视频| 91麻豆免费在线观看| 午夜成人亚洲理伦片在线观看| 亚洲高清免费视频| 中文字幕一区二区三区免费看| 欧美mv日韩mv国产网站| 福利小视频在线观看| 欧美高清无遮挡| 国产亚洲人成a在线v网站| 国产一区二区免费在线观看| 日韩一区二区中文| 毛片在线播放视频| 国产自产高清不卡| mm131美女视频| 亚洲午夜一区二区| 亚洲中文字幕在线一区| 精品视频中文字幕| 主播国产精品| 国产欧美一区二区三区久久| 欧美精品国产白浆久久久久| 国产av不卡一区二区| 日韩精品乱码av一区二区| 国产伦精品一区二区三区精品| 国产精品久久久久久一区二区三区 | 亚洲av成人精品一区二区三区在线播放| 日韩在线免费高清视频| 91久久国产综合久久91猫猫| caoporn国产精品免费公开| 不卡中文一二三区| 97av视频在线观看| 成人午夜激情在线| 永久久久久久久| 欧美日韩一本到| 番号集在线观看| 日本久久久久久久久久久| 精品资源在线| 日韩精品视频在线观看视频 | 一本色道久久综合亚洲精品不卡| 色婷婷综合在线观看| 中文字幕av不卡| 国产精品高清无码| 亚洲天天在线日亚洲洲精| 亚洲精品成人图区| 久久国产精品-国产精品| 亚洲私拍自拍| 免费不卡的av| 亚洲线精品一区二区三区 | 日本午夜精品久久久久| 色女孩综合网| 美国一区二区三区在线播放 | 91精品电影| 992tv人人草| 一区二区三区免费网站| av中文字幕播放| 久久6免费高清热精品| 涩爱av色老久久精品偷偷鲁 | 亚洲一区国产| 人人妻人人澡人人爽人人精品 | 欧美在线观看成人| www国产成人免费观看视频 深夜成人网| 国产精品日日夜夜| 亚洲国产精品成人va在线观看| 2021天堂中文幕一二区在线观| 国产精品免费视频一区二区| 亚洲免费大片| 日韩av一二区| 欧美性视频一区二区三区| 免费网站成人| 99re国产| 亚洲综合国产激情另类一区| 亚洲人成人无码网www国产| 欧美亚洲一区三区| 日本在线免费网| 国产精品swag| 免费亚洲网站| 美国一级片在线观看| 欧美一区二区三区日韩视频| 乱插在线www| 免费99视频| 久久97超碰国产精品超碰| 精品国产乱码久久久久久鸭王1| 欧美精品一区视频| 日本精品另类| 日本一区二区免费高清视频| 丁香婷婷综合网| 在线精品免费视| 丝袜一区二区三区| 国产+成+人+亚洲欧洲在线| 91精品91久久久中77777老牛| 中文字幕电影一区| 国产成人免费看一级大黄| 91精品国产乱码久久久久久久久| 国产毛片一区二区三区 | 中文字幕av影视| 欧美国产中文字幕| 国产精品一在线观看| 午夜诱惑痒痒网| 欧美性色视频在线| 97在线观看免费观看高清 | 亚洲一二区在线观看| 婷婷综合另类小说色区| av网站在线播放| 国产成人免费电影| 另类综合日韩欧美亚洲| 亚洲国产精品午夜在线观看| 伊人av综合网| 狼人精品一区二区三区在线 | 成av人片一区二区| 国产一区二区三区成人| 2019中文字幕在线免费观看|