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

2.3删除一个文档

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

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

扫描二维码关注公众号,回复: 11373714 查看本文章

 补充知识点:

  • 可以设置 Index Settings ,控制数据的分片
  • Primary Shard 的值不能修改,修改需要重新 Index。
  • 索引写入数据后,Replica 值可以修改。增加副本,可提高大并发下的读取性能
  • 通过控制集群的节点数,设置 Primary Shard 数,实现水平扩展

猜你喜欢

转载自blog.csdn.net/bohu83/article/details/106960807