天天看點

分布式搜尋引擎的架構原理-Elasticsearch一、反向索引二、什麼叫做分布式搜尋引擎三、Elasticsearch的資料結構四、Shard資料分片機制五、Replica多副本資料備援機制六、總結

一、反向索引

搜尋這個技術領域裡最入門級别的一個概念——反向索引。

我們先簡單說一下反向索引是個什麼?

比如我們不用索引,用資料庫存放和搜尋一些資料,比如說放了一些論壇的文章資料吧,那麼這個資料的格式大緻如下:

id title content
1 Java好用嗎? Java是非常非常好的一門語言。。。。
2 大家一起來學Java 我這兒有一些很好的Java學習資源,比如說。。。
3 一次Java面試經驗 去年這個時候,我學了Java,今年開始了面試。。。

如果我們要是用資料庫來進行搜尋包含“Java”這個關鍵字的所有文章,大緻SQL如下:

但是如果通過搜尋引擎類的技術來存放文章的内容,他是可以建立反向索引的。

這個反向索引的資料大緻看起來如下:

關鍵詞 id

Java [1, 2, 3]

語言 [1]

面試 [3]

資源 [2]

所謂的反向索引,就是把你的資料内容先分詞,每句話分成一個一個的關鍵詞,然後記錄好每個關鍵詞對應出現在了哪些id辨別的資料裡。

那麼你要搜尋包含“Java”關鍵詞的文章,直接掃描這個反向索引,在反向索引裡找到“Java”這個關鍵詞對應的那些資料的id就好了

然後你可以從其他地方根據這幾個id找到對應的資料就可以了,這個就是反向索引的資料格式以及搜尋的方式,上面這種利用反向索引查找資料的方式,也被稱之為全文檢索。

二、什麼叫做分布式搜尋引擎

假如說你現在要存儲1TB的資料,那麼放在一台機器還是可以的。

但是如果你要存儲超過10TB,100TB,甚至1000TB的資料呢?你用一台機器放的下嗎?

當然是放不下的了,你的機器磁盤空間是不夠的。

大家看一下下面的圖:

分布式搜尋引擎的架構原理-Elasticsearch一、反向索引二、什麼叫做分布式搜尋引擎三、Elasticsearch的資料結構四、Shard資料分片機制五、Replica多副本資料備援機制六、總結

是以這個時候,就得用分布式搜尋引擎了,也就是要使用多台機器來部署搜尋引擎叢集。

分布式搜尋引擎:把大量的索引資料拆散成多塊,每台機器放一部分,然後利用多台機器對分散之後的資料進行搜尋,所有操作全部是分布在多台機器上進行,形成了完整的分布式的架構。

分布式搜尋引擎的架構原理-Elasticsearch一、反向索引二、什麼叫做分布式搜尋引擎三、Elasticsearch的資料結構四、Shard資料分片機制五、Replica多副本資料備援機制六、總結

三、Elasticsearch的資料結構

index:索引,類似于資料庫裡的一張表,大概對應表的那個概念。

field:字段

比如建立一個專門存放文章的索引,然後他有id、title、content幾個field,這個field大緻就是他的一個字段。

document:代表了index中的一條資料。

下面就是一個document,這個document可以寫到index裡去,算是index裡的一條資料。

而且寫到es之後,這條資料的内容就會拆分為反向索引的資料格式來存儲。

id title content
1 Java好用嗎? Java是非常非常好的一門語言。。。。

四、Shard資料分片機制

比如說你有一個index,專門存放論壇裡的文章,現在論壇裡的文章有1億,占用了1TB的磁盤空間。

但随着業務增漲,這個文章有10億,100億,占用了10TB、甚至100TB的磁盤空間。

這時Index資料就無法在一台機器上存儲了。

這時,必須得支援這個index的資料分布式存儲在多台機器上,利用多台機器的磁盤空間來承載這麼大的資料量。

而且,需要保證每台機器上對這個index存儲的資料量不要太大,因為控制單台機器上這個index的資料量,可以保證他的搜尋性能更高。

于是就有了:Shard資料分片結構。每個index你都可以指定建立多少個shard,每個shard就是一個資料分片,會負責存儲這個index的一部分資料

比如說index裡有3億文章,占據3TB資料。然後這個index你設定了3個shard。

現在index裡的3TB資料分布式存儲在了3台機器上,每台機器上有一個shard,每個shard負責管理這個index的其中1TB資料的分片。

現在如果要對這個Index的3TB資料搜尋,那麼可以發送請求到3台機器上去,

3台機器上的shard直接可以分布式的并行對一部分資料進行搜尋,起到一個分布式搜尋的效果,大幅度提升海量資料的搜尋性能和吞吐量。

五、Replica多副本資料備援機制

但是現在有一個問題,假如說3台機器中的其中一台當機了,此時怎麼辦呢?

是不是這個index上的1/3資料丢失了,是以為了保證高可用,使用Replica多副本資料備援機制。

在Elasticsearch裡,就是支援對每個index設定一個replica數量的,也就是每個shard對應的replica副本的數量。

這個初始的shard就是primary shard,而且primary shard和replica shard是絕對不會放在一台機器上的,避免一台機器當機直接一個shard的副本也同時丢失了。

分布式搜尋引擎的架構原理-Elasticsearch一、反向索引二、什麼叫做分布式搜尋引擎三、Elasticsearch的資料結構四、Shard資料分片機制五、Replica多副本資料備援機制六、總結

在上述的replica機制下,每個primary shard都有一個replica shard在别的機器上,任何一台機器當機,都可以保證資料不會丢失,分布式搜尋引擎繼續可用。

Elasticsearch預設是支援每個index是5個primary shard,每個primary shard有1個replica shard作為副本。

六、總結

從搜尋引擎的反向索引開始,到單機無法承載海量資料,再到分布式搜尋引擎的存儲和搜尋。

然後我們以優秀的分布式搜尋引擎ES為例,闡述了ES的資料結構,shard資料分片機制,replica多副本機制,解釋了一下分布式搜尋引擎的架構原理。

原文:

https://mp.weixin.qq.com/s?__biz=MzU0OTk3ODQ3Ng==&mid=2247484455&idx=1&sn=f806d141d43cd870782fbae311b77958&chksm=fba6ec24ccd1653280a337c6be565d9e09c2e6d27662a06711974c67dcf9777212723db5b8fe&scene=21#wechat_redirect

繼續閱讀