2016-09-28 84 views
2

为了提供写入缩放,我决定将独立mongoDB转换为分片群集。问题是我找不到具有高度随机性的分片密钥,以确保集群的写入操作均匀分布,并且只要所有集合中存在复合唯一索引,我就不能使用散列分片密钥。如何分割数据?

我看到2个解决方案:

  1. 要使用唯一索引作为片键的前缀。但是即使忽略了不好的分配,也是不可接受的,因为不知怎么所有的块都放在主碎片上,然后平衡器将它们分布在碎片上。当我使用散列分片键时,负数放在第1个分片上,正数放在第2个分片上。我如何强制mongoDB使用范围分布在两个碎片上分配块?

  2. 使用标签感知分片。但是我无法预测下个月的数据,所以未来我的标签可能会分布不均匀。我想没有便宜的自动化数据标记解决方案。

您是否知道具有复合唯一密钥的集合的任何分片解决方案?

+0

是时间局部性对你很重要?如果是这样,使用便宜的选项,并与时间戳。 – wulfgarpro

+0

我不确定我是否有。你的意思是使用时间戳列作为标记吗?不幸的是,我们的“时间戳”是真正时间戳的小时截断。是否会导致“热碎片”? – versificator

+0

[This](https://www.mongodb.com/blog/post/on-selecting-a-shard-key-for-mongodb)是一个很好的写作。 – wulfgarpro

回答