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。
我在 mongodb 文档中使用 'id' 字段,它是 '_id' 的 HASH(由 mongo 生成的 ObjectId 字段)。我想对 'id' 字段使用 RANGE 分片。问题如下:
当 'shardKey' 是一些长字符串(例如 64 个字符)时,如何为每个分片设置范围?
如果您希望基于散列键分发数据,MongoDB 有一种内置的方法:
sh.shardCollection("yourDB.yourCollection", { _id: "hashed" })
这样,数据将在您的分片之间随机且均匀(或非常接近)分布。
请注意,您不能同时拥有逻辑键范围和随机数据分布。非此即彼,它们是互斥的。所以:
- 如果您想要随机数据分布,请使用
{ fieldName: "hashed" }
作为您的分片键定义。 - 如果您想手动控制数据的分布和访问方式,请使用普通的分片键并定义 shard tags。