之前的兩篇文章回顧:
第一篇介紹了數據庫索引在模糊搜素方面的局限性,介紹了Lucene是如何通過倒排索引解決這個問題的。簡單的介紹了一下倒排索引的存儲原理。
第二篇通過一個單元測試簡單的演示了一下插入和搜索的過程,最后給大家看了一下程序執行搜索和插入操作的時候,Lucene的工作目錄里面生成的幾個文件和文件的作用概要。
其實打開elasticsearch的工作目錄可以發現elasticsearch里面有和Lucene的工作目錄下相同的文件。接下來准備結合Lucene和elasticsearch講講這些文件。略過elasticsearch環境的搭建過程,直接進入工作目錄查看,對比如下(第一張是我安裝elasticsearch時候的安裝目錄,第二張圖片是我在跑上一篇單元測試用例時候指定的臨時文件夾,Lucene運行時候的臨時文件放在了這里):
可以看到:文件是一樣的。
然后我們來看外層的目錄結構,來體驗elasticsearch在Lucene基礎上做了什么,以及這么做的目的。
(1)首先說segements:因此可以看見每個
(2)然后說一下nodes:
可以看到默認有5個節點在elasticsearch啟動之后工作。點開任一node可以看到每個node都有一個index和一個translog:
Elasticsearch的index類似於關系型數據庫的庫的概念,在保存數據前,要先創建索引。在集群中index和node的關系如下圖:
(3)再說index和translog:
然后說translog:上一篇文章說到Lucene里面segments文件是數據存儲最重要的文件。數據是由一個個segment組成的,數據先寫入內存,經過設置的時間間隔將該時間段寫入內存的數據全部刷到一個segment中,由於一段時間生成一個segment,避免了短時間內寫入一個較大的磁盤文件,segment多了之后會進行merge成更大的segment。因此最初的數據寫入的數據是在內存中完成,所以寫入效率非常高。但是寫入過程中如果掉電導致內存里面的數據沒及時落盤,就會出現丟失數據的問題,所以Elasticsearch基於此現象實現了translog,只有在segment數據落盤后,Elasticsearch才會刪除對應的translog。