Elasticsearch 权威指南
  • Elasticsearch 权威指南
  • 入门
    • 初识
    • 安装
    • API
    • 文档
    • 索引
    • 搜索
    • 汇总
    • 小结
    • 分布式
    • 本章总结
  • 分布式集群
    • 空集群
    • 集群健康
    • 添加索引
    • 容错移转
    • 横向扩展
    • 扩展
    • 故障恢复
  • 数据
    • 文档
    • 索引
    • Get
    • 存在
    • 更新
    • 创建
    • 删除
    • 版本控制
    • 局部更新
    • Mget
    • Bulk
    • 总结
  • 分布式文档存储
    • 路由
    • 主从互通
    • 创建索引删除
    • 获取
    • 局部更新
    • 批量请求
    • 批量格式
  • 搜索
    • 空白搜索
    • 多索引多类型
    • 分页
    • 查询语句
  • 映射与统计
    • Exact_vs_full_text
    • Inverted_index
    • Analysis
    • Mapping
    • Complex_datatypes
Powered by GitBook
On this page

Was this helpful?

  1. 分布式文档存储

路由

当你索引一个文档,它被保存在单个的主分片上,Elasticsearch如何知道文档属于哪个分片呢? 当我们创建一个新文档,它如何知道应该存储在分片1还是分片2上呢?

这个过程不能是随机的,因为我们将来需要取回该文档。 事实上,它是由一个非常简单的公式来决定的:

分片 = hash(routing) % 主分片数量

routing 值可以是任何的字符串, 默认是文档的 _id ,但也可以设置成一个自定义的值。 routing 字符串被传递到一个哈希函数以生成一个数字,然后除以索引的主分片的数量 得到余数 remainder. 余数将总是在 0 到 主分片数量 - 1 之间, 它告诉了我们用以存放 一个特定文档的分片编号。

这解释了为什么主分片的数量只能在索引创建时设置、而且不能修改。 如果主分片的数量一旦在日后进行了修改,所有之前的路由值都会无效,文档再也无法被找到。

所有文档 APIs (get, index, delete, bulk, update 和 mget) 都可以接受 routing 参数,用以自定义 文档-到-分片 的映射。 自定义的路由将用于确保所有的文档 -- 例如属于同一用户的所有文档 -- 保存在相同的分片上。 我们将在 <<扩展>> 中详细讨论你为什么希望这么做。

Previous分布式文档存储Next主从互通

Last updated 5 years ago

Was this helpful?