ElasticSearch前世今生lucene
技術標籤:es
lucene 和 es 的前世今生
lucene 是最先進、功能最強大的搜尋庫。如果直接基於 lucene 開發,非常複雜,即便寫一些簡單的功能,也要寫大量的 Java 程式碼,需要深入理解原理。
elasticsearch 基於 lucene,隱藏了 lucene 的複雜性,提供了簡單易用的 restful api / Java api 介面(另外還有其他語言的 api 介面)。
- 分散式的文件儲存引擎
- 分散式的搜尋引擎和分析引擎
- 分散式,支援 PB 級資料
es 的核心概念
Near Realtime
近實時,有兩層意思:
- 從寫入資料到資料可以被搜尋到有一個小延遲(大概是 1s)
- 基於 es 執行搜尋和分析可以達到秒級
Cluster 叢集
叢集包含多個節點,每個節點屬於哪個叢集都是通過一個配置來決定的,對於中小型應用來說,剛開始一個叢集就一個節點很正常。
Node 節點
Node 是叢集中的一個節點,節點也有一個名稱,預設是隨機分配的。預設節點會去加入一個名稱為elasticsearch
的叢集。如果直接啟動一堆節點,那麼它們會自動組成一個 elasticsearch 叢集,當然一個節點也可以組成 elasticsearch 叢集。
Document & field
文件是 es 中最小的資料單元,一個 document 可以是一條客戶資料、一條商品分類資料、一條訂單資料,通常用 json 資料結構來表示。每個 index 下的 type,都可以儲存多條 document。一個 document 裡面有多個 field,每個 field 就是一個數據欄位。
{
"product_id": "1",
"product_name": "iPhone X",
"product_desc": "蘋果手機",
"category_id": "2",
"category_name": "電子產品"
}
Index
索引包含了一堆有相似結構的文件資料,比如商品索引。一個索引包含很多 document,一個索引就代表了一類相似或者相同的 ducument。
Type
型別,每個索引裡可以有一個或者多個 type,type 是 index 的一個邏輯分類,比如商品 index 下有多個 type:日化商品 type、電器商品 type、生鮮商品 type。每個 type 下的 document 的 field 可能不太一樣。
shard
單臺機器無法儲存大量資料,es 可以將一個索引中的資料切分為多個 shard,分佈在多臺伺服器上儲存。有了 shard 就可以橫向擴充套件,儲存更多資料,讓搜尋和分析等操作分佈到多臺伺服器上去執行,提升吞吐量和效能。每個 shard 都是一個 lucene index。
replica
任何一個伺服器隨時可能故障或宕機,此時 shard 可能就會丟失,因此可以為每個 shard 建立多個 replica 副本。replica 可以在 shard 故障時提供備用服務,保證資料不丟失,多個 replica 還可以提升搜尋操作的吞吐量和效能。primary shard(建立索引時一次設定,不能修改,預設 5 個),replica shard(隨時修改數量,預設 1 個),預設每個索引 10 個 shard,5 個 primary shard,5個 replica shard,最小的高可用配置,是 2 臺伺服器。
這麼說吧,shard 分為 primary shard 和 replica shard。而 primary shard 一般簡稱為 shard,而 replica shard 一般簡稱為 replica。
es 核心概念 vs. db 核心概念
es | db |
---|---|
index | 資料庫 |
type | 資料表 |
docuemnt | 一行資料 |
以上是一個簡單的類比。