前言
正文
先來個比較容易對比的表格,但不完全一樣,
有幾個是我自己加上去的。
RDBMS | Elasticsearch |
---|---|
VM | Node |
Table | Index |
Row | Document |
Column | Field |
Schema | Mapping |
SQL | DSL |
ref. [Elasticsearch] 基本概念 & 搜尋入門
摘要
Node
-
Master Node
- 處理建立/刪除 index 的 request,並實際執行
- 決定每個 shard 要被分配到哪個 data node 上
- 維護 & 更新 cluster state
- 當 master node出問題,master eligible node(從cluster設定多個)會開始選舉,選出下一個 master node
-
Coordinating Node(協調節點)
- 所有node預設都是 Coordinating Node
- 處理request的node 以及 最後進行結果的彙整
- coordinating node 可以直接接收 search request 並處理,不需要透過 master node 轉過來
-
Data Node
- 可以保存資料的 node,每個 node 啟動後都會預設是 data node,可以透過設定
node.data: false
停用 data node 功能 - 透過增加 data node 可以解決資料水平擴展 & 解決單點故障導致資料遺失的問題
- 可以保存資料的 node,每個 node 啟動後都會預設是 data node,可以透過設定
-
Cluster State(集群狀態)
- 包含所有node資訊
- 包含所有index 及 相對應的 mapping/setting配置
- shard的路由資訊
- 每個node上都有Cluster State,只有master 可修改
Shard
將索引劃分成多份的能力,這些份就叫做分片(shard)
-
shard 是 ES分散式儲存的基礎,包含 primary shard 及 replica shard
-
每一個shard 就是一個 Lucene instance(用於全文檢索和搜尋 e.g. Solr,Elasticsearch…)
-
Primary Shard(提升系統儲存容量)
- 將一份被索引後的資料,分散到多個data node上存放
- primary shard 的數量在建立 index時就會指定,無法後續修改
-
Replica Shard(提高資料可用性)
- 當primary shard遺失,Replica shard可以被推成 primary shard
- replica shard數量可動態調整,讓每個data node上都有完整資料
- 可一定程度提高查詢的效能
- ES7.0開始,primary shard 預設為1 ,replica shard預設 為0
如不設定replica shard,一旦data node 故障導致 primary shard遺失,資料無法復原
-
Shard設定
-
replica shard設定過多,會降低clsuter整體的寫入效能
-
replica shard 必須和 primary shard 被分配在不同的 data node 上;但所有的 primary shard 可以在同一個 data node 上
-
Command
-
取得Cluster 健康狀態
GET _cluster/health/
Status
- Green :表示 Primary shard & Replica Shard可正常分配
- Yellow:表示 Primay shard可正常分配,但Replica shard 分配有問題
- Red:有Primary shard 無法正常分配
-
取得 Shard狀態
GET _cat/shards
p :代表 primary shard
r :代表 replica shard
- shard的分佈情形,在哪個node上
- 每個shard包含的document數量 & 空間
情境
- 如果cluster 只有一個node ,全部會被 primary shard佔據,導致 replica shard 無法被分配,因此cluster健康狀態為 yellow
資料寫入
-
cache
- 資料寫入後無法變動,避免lock機制所帶來的效能問題
- 因不可變動,若要讓新的document 可被搜尋,需要重建index
- 寫入document前,會先寫到 Index Buffer的儲存空間
- 滿足條件(Index Buffer佔滿) or 特定時間(預設一秒一次),會將 Buffer 寫入 Segment 。寫入的過程叫Refresh。
-
transaction log
- 每個shard都有對應的transaction log
- 寫入document的時候,同時也會寫入 transaction log
ref.
0 意見:
張貼留言