我在mongodb文档中使用“id”字段,它是“_id”的HASH(由mongo生成的ObjectId字段)。我想将 RANGE 分片与“id”字段一起使用。问题如下:
当“shardKey”是一些长字符串(例如 64 个字符)时,如何为每个分片设置范围?
最佳答案
如果您希望数据基于哈希键进行分发,MongoDB 有一个内置的方法可以做到这一点:
sh.shardCollection("yourDB.yourCollection", { _id: "hashed" })
这样,数据将在您的分片之间随机且均匀(或非常接近)地分布。
请注意,您不能同时拥有逻辑键范围和随机数据分布。要么是其中之一,要么是另一个,它们是相互排斥的。所以:
- 如果您想要随机数据分布,请使用
{ fieldName: "hashed"}
作为您的分片键定义。 - 如果您想手动控制数据的分发和访问方式,请使用普通分片键并定义 shard tags .
关于mongodb 使用字符串字段进行范围分片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33431084/