目录
文档存储在分片上
-
文档会存储在具体的某个主分片和副本分片上:例如文档1,会存储在P0和R0分片上
-
文档到分片的映射算法
-
确保文档能够均匀分布在所用的分片上,充分利用硬件资源,避免部分机器空闲,部分机器繁忙
-
潜在的算法
-
随机/Round Robin.当查询文档1,分片数很多,需要多次查询才能查到文档1
-
维护文档到分片的映射关系,当文档数据量很大的时候,维护成本高
-
实时计算,通过文档1,自动算出需要去哪个分片上获取文档
-
-
文档到分片的路由算法
-
shard = hash(_routing)% number_of_primary_shards
-
Hash算法确保文档均匀分布到分片中
-
默认的_routing值是文档id
-
可以自定制routing数值,例如用相同国家的商品,都分配到指定的shard
-
设置 Index Settings后,Primary数不能修改的根本原因
-
更新一个文档的的流程
- 用户发送一个请求到一个节点,该节点扮演Cooperation Node的一个角色通过hash算法计算这个路由该被发送到那个分片上
- 先做一个删除,再把文档创建出来
- 成功之后再把这个操作结果发送给Cooperation Node,Cooperation Node将结果相应给客户端
删除一个文档的流程
- 用户发送一个请求到一个节点,该节点扮演Cooperation Node的一个角色通过hash算法计算这个路由该被发送到那个分片上
- 删除该分片上对应的文档,将删除replica的请求发送到其他replica上(路由通过Cluster State获取)
- replica删除成功后发送给Primary Shard,Primary Shard将整体删除的结果发送给Cooperation Node,Cooperation Node将结果相应给客户端