我一直在阅读标签识别分片。这些是我提到的链接:
http://www.mongodb.org/display/DOCS/Tag+Aware+Sharding
http://www.kchodorow.com/blog/2012/07/25/controlling-collection-distribution/
Kristina以非常清晰的方式解释了这个概念,有一件事是肯定的:这一改进将使MongoDB更加适合开发人员。
但是我的问题是......看起来标记/重新标记意味着可以轻松地迁移块。将所有写入到首选数据中心等等。但是这如何适应旧的范围分区系统和Mongo学习的方式平衡的关键分布?据说shard-key无法更改,这是因为假设数据分布在分片上并且更改分片键会干扰这一点。是不是应用基本上做同样的标签?那么标签感知分片意味着来处理这个问题吗?
修改
任何想法如何影响这些巨大的迁移?
答案 0 :(得分:7)
Aafreen,
你是对的。在此阶段,shard-tagging执行许多与平衡键平衡相同的功能。它没有做的一件事就是执行超出标记的任何级别的分发。因此,将标记体系结构置于现有的分片体系结构之上可能更为正确。
您必须记住,标记仅适用于:
a)标记数据将进入,未标记数据将使用分片键
b)仍需要分发许多标记服务器之间共享的标记数据您当然可以使用标签识别分片来手动控制数据分布,方法与平衡器现在的方式相同,方法是制作足够精细的标签,以便将数据放在您想要的位置并均匀分布。
然而,用例更类似于您链接的文档。您将大量分片分解为较小的子集的位置。在此示例中,您将标记每个对象,然后标记将其推送到正确的地理位置(用于较低延迟检索),并且一旦在正确的地理位置内,原始分片架构将接管并在标记的分片之间分发。
至于索引,它们受到迁移的严重影响,因为它们需要被重新命名。但是负载级别与大量块迁移的负载级别相同 - 例如向群集添加新分片。