天天看點

Elasticsearch核心技術與實戰學習筆記 39 | 文檔分布式存儲

一 序

  本文屬于極客時間Elasticsearch核心技術與實戰學習筆記系列。

二 文檔儲存在分片上

文檔會存儲在具體的某個主分片和副本分片上:例如文檔 1,會儲存在 P0 R0 分片上

文檔到分片的映射算法

  1. 確定文檔能均勻分布在所用分片上,充分利用硬體資源,避免部分機器空閑,部門機器繁忙
  2. 潛在的算法
  • 随機 / Round Robin. 當查詢文檔 1,分片數很多,需要多次查詢才能查檔文檔 1
  • 維護文檔到分片的映射關系,當文檔資料量大的時候,維護成本高
  • 實時計算,通過文檔 1,自動算出,需要去哪個分片上擷取文檔.

這裡ES采用的就是方案3

2.1 文檔到分片的路由算法

  shard = hash(_routing) % number_of_primary_shards

  • Hash 算法確定文檔均勻分散到分片中
  • 預設的_routing 值是文檔 id
  • 可以自行制定 routing 數值,例如用相同國家的商品,都配置設定到制定的 shard
  • 設定 Index Setting 後,Primary 數,不能随意修改的根本原因

2.2 更新文檔

順序: index -> hash -> route -> delete -> index -> success -> response

1, 使用者發出update請求,第一個節點是Coordinating Node,他通過hash計算算出文檔對應分片,路由到這個分片。

更新是執行的兩步,先删除再建立。成功後傳回一個success給Coordinating Node,Coordinating Node再傳回response

Elasticsearch核心技術與實戰學習筆記 39 | 文檔分布式存儲

2.3删除一個文檔

順序 :detele -> hash&route -> delete -> delete replica -> success -> deleted -> response

跟更新類似,多了删除副本的流程。

Elasticsearch核心技術與實戰學習筆記 39 | 文檔分布式存儲

 補充知識點:

  • 可以設定 Index Settings ,控制資料的分片
  • Primary Shard 的值不能修改,修改需要重新 Index。
  • 索引寫入資料後,Replica 值可以修改。增加副本,可提高大并發下的讀取性能
  • 通過控制叢集的節點數,設定 Primary Shard 數,實作水準擴充

繼續閱讀