亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MySQL > 正文

淺談MySQL和Lucene索引的對比分析

2024-07-24 13:10:41
字體:
來源:轉載
供稿:網友

MySQL和Lucene都可以對數據構建索引并通過索引查詢數據,一個是關系型數據庫,一個是構建搜索引擎(Solr、ElasticSearch)的核心類庫。兩者的索引(index)有什么區別呢?以前寫過一篇《Solr與MySQL查詢性能對比》,只是簡單的對比了下查詢性能,對于內部原理卻沒有解釋,本文簡單分析下兩者的索引區別。

MySQL索引實現

在MySQL中,索引屬于存儲引擎級別的概念,不同存儲引擎對索引的實現方式是不同的,本文主要討論MyISAM和InnoDB兩個存儲引擎的索引實現方式。

MyISAM索引實現

MyISAM引擎使用B+Tree作為索引結構,葉節點的data域存放的是數據記錄的地址。下圖是MyISAM索引的原理圖:

mysql,Lucene,索引

圖1是一個MyISAM表的主索引(Primary key)示意??梢钥闯鯩yISAM的索引文件僅僅保存數據記錄的地址。在MyISAM中,主索引和輔助索引(Secondary key)在結構上沒有任何區別,只是主索引要求key是唯一的,而輔助索引的key可以重復。B+Tree的所有葉子節點包含所有關鍵字且是按照升序排列的。

MyISAM表的索引和數據是分離的,索引保存在”表名.MYI”文件內,而數據保存在“表名.MYD”文件內。

MyISAM的索引方式也叫做“非聚集”的,之所以這么稱呼是為了與InnoDB的聚集索引區分。

InnoDB索引實現

雖然InnoDB也使用B+Tree作為索引結構,但具體實現方式卻與MyISAM截然不同。

第一個重大區別是InnoDB的數據文件本身就是索引文件。從上文知道,MyISAM索引文件和數據文件是分離的,索引文件僅保存數據記錄的地址。而在InnoDB中,表數據文件本身就是按B+Tree組織的一個索引結構,這棵樹的葉節點data域保存了完整的數據記錄。這個索引的key是數據表的主鍵,因此InnoDB表數據文件本身就是主索引。

mysql,Lucene,索引

圖2是InnoDB主索引(同時也是數據文件)的示意圖,可以看到葉節點包含了完整的數據記錄。這種索引叫做聚集索引。因為InnoDB的數據文件本身要按主鍵聚集,所以InnoDB要求表必須有主鍵(MyISAM可以沒有),如果沒有顯式指定,則MySQL系統會自動選擇一個可以唯一標識數據記錄的列作為主鍵,如果不存在這種列,則MySQL自動為InnoDB表生成一個隱含字段作為主鍵,這個字段長度為6個字節,類型為長整形。

第二個與MyISAM索引的不同是InnoDB的輔助索引data域存儲相應記錄主鍵的值而不是地址。換句話說,InnoDB的所有輔助索引都引用主鍵作為data域。例如,圖3為定義在Col3上的一個輔助索引:

mysql,Lucene,索引

這里以英文字符的ASCII碼作為比較準則。聚集索引這種實現方式使得按主鍵的搜索十分高效,但是輔助索引搜索需要檢索兩遍索引:首先檢索輔助索引獲得主鍵,然后用主鍵到主索引中檢索獲得記錄。

了解不同存儲引擎的索引實現方式對于正確使用和優化索引都非常有幫助,例如知道了InnoDB的索引實現后,就很容易明白為什么不建議使用過長的字段作為主鍵,因為所有輔助索引都引用主索引,過長的主索引會令輔助索引變得過大。再例如,用非單調的字段作為主鍵在InnoDB中不是個好主意,因為InnoDB數據文件本身是一顆B+Tree,非單調的主鍵會造成在插入新記錄時數據文件為了維持B+Tree的特性而頻繁的分裂調整,十分低效,而使用自增字段作為主鍵則是一個很好的選擇。

講MySQL索引的實現的文章很多,以上也是參考了《MySQL索引背后的數據結構及算法原理》,現在來看看Lucene的索引原理。

Lucene索引實現

Lucene的索引不是B+Tree組織的,而是倒排索引,Lucene的倒排索引由Term index,Team Dictionary和Posting List組成。

mysql,Lucene,索引

有倒排索引(invertedindex)就有正排索引(forwardindex),正排索引就是文檔(Document)和它的字段Fields正向對應的關系:

DocID

name

sex

age

1

jack

18

2

lucy

17

3

peter

17

倒排索引是字段Field和擁有這個Field的文檔對應的關系:

Sex字段:

[1,3]

[2]

Age字段:

18

[1]

17

[2,3]

Jack,lucy或者17,18這些叫做term,而[1,3]就是posting list。Posting list就是一個int型的數組,存儲了所有符合某個term的文檔id。那么什么是Term index和Term dictionary?

如上,假設name字段有很多個term,比如:Carla,Sara,Elin,Ada,Patty,Kate,Selena

如果按照這樣的順序排列,找出某個特定的term一定很慢,因為term沒有排序,需要全部過濾一遍才能找出特定的term。排序之后就變成了:Ada,Carla,Elin,Kate,Patty,Sara,Selena

這樣就可以用二分查找的方式,比全遍歷更快地找出目標的term。如何組織這些term的方式就是 Term dictionary,意思就是term的字典。有了Term dictionary之后,就可以用比較少的比較次數和磁盤讀次數查找目標。但是磁盤的隨機讀操作仍然是非常昂貴的,所以盡量少的讀磁盤,有必要把一些數據緩存到內存里。但是整個Term dictionary本身又太大了,無法完整地放到內存里。于是就有了Term index。Term index有點像一本字典的大的章節表。比如:

A開頭的term ……………. Xxx頁

C開頭的term ……………. Xxx頁

E開頭的term ……………. Xxx頁

如果所有的term都是英文字符的話,可能這個term index就真的是26個英文字符表構成的了。但是實際的情況是,term未必都是英文字符,term可以是任意的byte數組。而且26個英文字符也未必是每一個字符都有均等的term,比如x字符開頭的term可能一個都沒有,而s開頭的term又特別多。實際的term index是一棵trie 樹:

mysql,Lucene,索引

上圖例子是一個包含 "A", "to", "tea", "ted", "ten", "i", "in", 和 "inn" 的trie樹。這棵樹不會包含所有的term,它包含的是term的一些前綴。通過term index可以快速地定位到term dictionary的某個offset,然后從這個位置再往后順序查找。再加上一些壓縮技術(想了解更多,搜索 Lucene Finite State Transducers),Term index的尺寸可以只有所有term的尺寸的幾十分之一,使得用內存緩存整個term index變成可能。

整體上來說就是這樣的效果:

mysql,Lucene,索引

由Term index到Term Dictionary,再到Posting List,通過某個字段的關鍵字去查詢結果的過程就比較清楚了,通過多個關鍵字的Posting List進行AND或者OR進行交集或者并集的查詢也簡單了。

對比MySQL的B+Tree索引原理,可以發現:

1)Lucene的Term index和Term Dictionary其實對應的就是MySQL的B+Tree的功能,為關鍵字key提供索引。Lucene的inverted index可以比MySQL的b-tree檢索更快。

2)Term index在內存中是以FST(finite state transducers)的形式保存的,其特點是非常節省內存。所以Lucene搜索一個關鍵字key的速度是非??斓模鳰ySQL的B+Tree需要讀磁盤比較。

3)Term dictionary在磁盤上是以分block的方式保存的,一個block內部利用公共前綴壓縮,比如都是Ab開頭的單詞就可以把Ab省去。這樣Term dictionary可以比B-tree更節約磁盤空間。

4)Lucene對不同的數據類型采用了不同的索引方式,上面分析是針對field為字符串的,比如針對int,有TrieIntField類型,針對經緯度,就可以用GeoHash編碼。

5)在 Mysql中給兩個字段獨立建立的索引無法聯合起來使用,必須對聯合查詢的場景建立復合索引,而Lucene可以任何AND或者OR組合使用索引進行檢索。

以上就是小編為大家帶來的淺談MySQL和Lucene索引的對比分析的全部內容了,希望對大家有所幫助,多多支持VeVb武林網~


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产v综合v亚洲欧美久久| 亚洲综合精品伊人久久| 久久久精品久久| 亚洲精品国精品久久99热一| 中文综合在线观看| 高清一区二区三区日本久| 欧美性猛交xxxx偷拍洗澡| 亚洲四色影视在线观看| 成人黄色影片在线| 亚洲欧美制服综合另类| 日韩电影中文字幕在线观看| 一本久久综合亚洲鲁鲁| 国产精品中文久久久久久久| 成人有码视频在线播放| 国产一区二区日韩| 日韩在线免费观看视频| 91免费看片网站| 原创国产精品91| 欧美激情极品视频| 亚洲视频第一页| 亚洲精品一区二区在线| 久久在线视频在线| 在线精品视频视频中文字幕| 狠狠操狠狠色综合网| 精品久久久一区二区| 欧美国产日韩中文字幕在线| 91精品免费久久久久久久久| 91精品国产综合久久香蕉最新版| 国产精品免费视频xxxx| 国产日韩欧美91| 一区二区三区 在线观看视| 亚洲免费一在线| 亚洲人成欧美中文字幕| 亚洲午夜精品久久久久久久久久久久| 久久久久国产精品一区| 国产丝袜一区二区| 国产日韩在线亚洲字幕中文| 色哟哟入口国产精品| 5566日本婷婷色中文字幕97| 色av吧综合网| 97视频免费在线观看| 亚洲欧美日韩图片| 久久久亚洲影院你懂的| 欧美成人在线免费视频| 日韩电影大片中文字幕| 国产精品久久久久久久久免费看| 中文字幕精品久久久久| 在线电影av不卡网址| 亚洲精品电影网| 成人福利在线观看| 亚洲国产婷婷香蕉久久久久久| 欧美一区二区三区精品电影| 成人写真视频福利网| 国产精品美女www| 国产亚洲精品高潮| 黑丝美女久久久| 北条麻妃久久精品| 亚洲一区二区免费| 88国产精品欧美一区二区三区| 91tv亚洲精品香蕉国产一区7ujn| 日韩精品视频中文在线观看| 欧美日韩一区二区三区在线免费观看| 国产91在线播放精品91| 亚洲天堂视频在线观看| 亚洲爱爱爱爱爱| 性夜试看影院91社区| 中文欧美在线视频| 欧美巨乳美女视频| 亚洲欧美精品中文字幕在线| 亚洲视频在线观看| 韩国日本不卡在线| 91九色国产视频| 国产精品久久国产精品99gif| 丝袜美腿亚洲一区二区| 欧日韩在线观看| 欧美激情伊人电影| 亚洲成人黄色在线观看| 国产乱肥老妇国产一区二| 国产精品自拍视频| 日韩亚洲成人av在线| 日韩av三级在线观看| 国产有码在线一区二区视频| 懂色av一区二区三区| 亚洲国模精品私拍| 亚洲精品日韩久久久| 日韩av在线精品| 91精品久久久久久久久久久久久久| 97涩涩爰在线观看亚洲| 午夜免费久久久久| 91香蕉嫩草神马影院在线观看| 久久精品91久久香蕉加勒比| 91在线视频导航| 欧美亚洲日本网站| 亚洲国产精品国自产拍av秋霞| 狠狠躁天天躁日日躁欧美| 精品在线欧美视频| 美女性感视频久久久| 中文字幕日韩av电影| 国产精品视频在线观看| 国产视频在线一区二区| 亚洲的天堂在线中文字幕| 国产日本欧美在线观看| 亚洲男人天堂网| 亚洲石原莉奈一区二区在线观看| 成人性教育视频在线观看| 久久久久久国产精品| 国产欧美一区二区三区在线看| 亚洲最大成人网色| 国产精品美女www爽爽爽视频| 国产69精品久久久久9| 日韩av电影手机在线| 欧美裸体xxxx极品少妇软件| 欧美日韩国产在线| 欧美精品18videos性欧美| 欧美日韩亚洲精品一区二区三区| 富二代精品短视频| 国产香蕉精品视频一区二区三区| 亚洲美女av在线| 91精品国产色综合| 国产丝袜精品第一页| 精品综合久久久久久97| 久久久成人精品| 中文字幕视频在线免费欧美日韩综合在线看| 欧美成人精品h版在线观看| 亚洲欧美三级在线| 国产精品久久久久久久久久新婚| 久久99热这里只有精品国产| 综合网中文字幕| 日韩hd视频在线观看| 成人免费福利在线| 久久久久女教师免费一区| 亚洲国产成人精品电影| 国产视频久久久久| 国内精品视频在线| 亚洲欧美日韩一区在线| 欧美视频在线免费看| 欧美xxxx做受欧美.88| 中文字幕一精品亚洲无线一区| 国产999在线| 亚洲国产精品女人久久久| 亚洲精品一区中文字幕乱码| 伊人久久大香线蕉av一区二区| 国内精品久久久久久久久| 成人网页在线免费观看| 精品一区二区三区电影| 欧美成人国产va精品日本一级| 欧美午夜女人视频在线| 亚洲色图美腿丝袜| 成人在线一区二区| 日韩欧美国产黄色| 欧美日韩一区二区精品| 91午夜理伦私人影院| 久久97精品久久久久久久不卡| 午夜精品久久久99热福利| 久久影视电视剧免费网站| 91香蕉亚洲精品| 26uuu亚洲伊人春色| 丰满岳妇乱一区二区三区| 精品国产一区二区在线| 国产一区二区三区直播精品电影| 久久视频在线免费观看| www国产91| 丝袜美腿亚洲一区二区| 亚洲天堂第一页|