mongodb 使用字符串字段进行范围分片

mongodb range sharding with string field

我在 mongodb 文档中使用 'id' 字段,它是 '_id' 的 HASH(由 mongo 生成的 ObjectId 字段)。我想对 'id' 字段使用 RANGE 分片。问题如下:

当 'shardKey' 是一些长字符串(例如 64 个字符)时,如何为每个分片设置范围?

如果您希望基于散列键分发数据,MongoDB 有一种内置的方法:

sh.shardCollection("yourDB.yourCollection", { _id: "hashed" })

这样,数据将在您的分片之间随机且均匀(或非常接近)分布。

请注意,您不能同时拥有逻辑键范围和随机数据分布。非此即彼,它们是互斥的。所以:

  • 如果您想要随机数据分布,请使用 { fieldName: "hashed" } 作为您的分片键定义。
  • 如果您想手动控制数据的分布和访问方式,请使用普通的分片键并定义 shard tags