elasticsearch的核心概念、分佈式特性

1、lucene和elasticsearch的前世今生

lucene,最先進、功能最強大的搜索庫,直接基於lucene開發,非常複雜,api複雜(實現一些簡單的功能,寫大量的java代碼),需要深入理解原理(各種索引結構)

elasticsearch,基於lucene,隱藏複雜性,提供簡單易用的restful api接口、java api接口(還有其他語言的api接口)
(1)分佈式的文檔存儲引擎
(2)分佈式的搜索引擎和分析引擎
(3)分佈式,支持PB級數據

開箱即用,優秀的默認參數,不需要任何額外設置,完全開源

關於elasticsearch的一個傳說,有一個程序員失業了,陪着自己老婆去英國倫敦學習廚師課程。程序員在失業期間想給老婆寫一個菜譜搜索引擎,覺得lucene實在太複雜了,就開發了一個封裝了lucene的開源項目,compass。後來程序員找到了工作,是做分佈式的高性能項目的,覺得compass不夠,就寫了elasticsearch,讓lucene變成分佈式的系統。

2、elasticsearch的核心概念

Elasticsearch是什麼
Elasticsearch是一個基於Lucene搜索引擎爲核心構建的開源,分佈式,RESTful搜索服務器。設計用於雲計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便,輕鬆擴展服務節點。
Elasticsearch是用Java開發的,但它卻不是隻支持Java語言,因爲它支持RESTful方式調用,那理論上它是支持所有開發語言的,除此之外,如果你不想使用RESTful方式調用Elasticsearch服務器,那Elasticsearch還提供了各種語言的api供我們使用。
我們通過以下這張分析圖來看看elasticsearch是如何工作的:
在這裏插入圖片描述

ES服務器工作示意圖.png

相關概念
接近實時(NRT):
Elasticsearch 是一個接近實時的搜索平臺。這意味着,從索引一個文檔直到這個文檔能夠被搜索到有一個很小的延遲,包括如果做了集羣的話,集羣中的各個節點數據同步也是接近實時的。

集羣(cluster)
elasticsearch一個很大的優勢是它可以很方便的做集羣,在一個elasticsearch的集羣中,有很多的節點(node),其中有一個爲主節點,這個主節點是可以通過選舉產生的,主從節點是對於集羣內部來說的。es的一個概念就是去中心化,字面上理解就是無中心節點,這是對於集羣外部來說的,因爲從外部來看es集羣,在邏輯上是個整體,你與任何一個節點的通信和與整個es集羣通信是等價的。

節點(node)
節點(node)其實就是一個elasticsearch服務器的實例,節點(node)主要有3種類型,第一種類型是client_node,主要是起到請求分發的作用,類似路由。第二種類型是master_node,是主的節點,所有的新增,刪除,數據分片都是由主節點操作(elasticsearch底層是沒有更新數據操作的,上層對外提供的更新實際上是刪除了再新增),當然也能承擔搜索操作。第三種類型是date_node,該類型的節點只能做搜索操作,具體會分配到哪個date_node,就是由client_node決定,而data_node的數據都是從master_node同步過來的。

索引(index):
ElasticSearch將它的數據存儲在一個或多個索引(index)中。用SQL領域的術語來類比,索引就像數據庫,可以向索引寫入文檔或者從索引中讀取文檔。

文檔類型(type):
文檔類型(type)是用來規定文檔的各個字段內容的數據類型和其他的一些約束,相當於關係型數據庫中的表,一個索引(index)可以有多個文檔類型(type)。

文檔(document):
在Elasticsearch中,文檔(document)是存儲數據的載體,包含一個或多個字段。一個文檔(document)相當於關係型數據庫中的一行數據。

   這些就是elasticsearch的一些比較重要的概念,還有其他的概念我們就不一一列舉了,但是大家通過以上的概念可能發現,elasticsearch的設計跟關係型數據庫的設計還是挺像的,我們可以通過關係型數據庫的概念來類比着學習elasticsearch,所以來看看以下這張對比圖:

在這裏插入圖片描述

MySQL和elasticsearch概念對比.png

核心原理:
在這裏插入圖片描述

最後給你們貼個圖以便於理解:此圖原創作者中華石山如有侵權請儘快通知
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章