Mongodb区域文档令人困惑

时间:2020-05-19 20:03:56

标签: mongodb sharding

我很难理解文档: https://docs.mongodb.com/manual/core/zone-sharding/

文档指出:“区域不能共享范围,也不能具有重叠范围。”

但是,在示例中:“碎片Alpha和Beta具有A区域。碎片Beta也具有B区域”

据我了解,A区和B区共享(或重叠)碎片Alpha。为什么它与提到的规则不冲突?

2 个答案:

答案 0 :(得分:2)

“重叠范围”是指分片键。例如。在给定的示例中,区域A覆盖键[1,10),区域B覆盖键[10,20)。重叠的一个例子是覆盖键[5,20)的B区。

没有要求,分片仅包含属于一个区域的块。该文档说(重点是我的):

可以将每个区域与群集中的一个或多个分片关联。

这种关联是可选的。

答案 1 :(得分:1)

是的,文档有点混乱。

我会试着用一个例子来解释。

第一阶段

假设您正在管理一所学校。你有几个不同学科的学生。您已使用 5 个分片进行分片设置。最初数据会平均分配给他们。

但假设学生不在同一个学习设施中。但地理位置位于地球的不同部分。现在目前的分片并没有为所有人提供最佳体验。因此,我们可能希望在他们的研究中心附近为他们托管数据。

第二阶段

因此,我们在学习中心附近提出了另一个 mongodb 实例。并将区域分配给这些实例。您也可以将多个区域分配给同一个分片。

尚未进行重新平衡,我们刚刚为分片分配了区域。

第三阶段

在这一步中,我们将把 package main import ( "fmt" "strings" ) func LastRuneIndex(s, substr string) (int, error) { byteIndex := strings.LastIndex(s, substr) if byteIndex < 0 { return byteIndex, nil } reader := strings.NewReader(s) count := 0 for byteIndex > 0 { _, bytes, err := reader.ReadRune() if err != nil { return 0, err } byteIndex = byteIndex - bytes count += 1 } return count, nil } func main() { s := "foo 日本 foo!" count, err := LastRuneIndex(s, "foo") fmt.Println(count, err) // outputs: // 7 <nil> } (表示所有数学文档)分配给 Maths min-max keys(对于其他科目也是如此)。一旦我们启用重新平衡,第 1 步将移至第 3 步。数据将按照您的要求进行分配。

enter image description here

现在重温文档中的内容

<块引用>

您可以将每个区域与集群中的一个或多个分片相关联。`

示例:ZONE_Maths、ZONE_Physics 分布在 1 个以上的分片上。

<块引用>

一个分片可以关联任意数量的区域。

示例:Stard4 具有多个区域的数据。

<块引用>

在平衡集群中,MongoDB 仅将区域覆盖的块迁移到与区域关联的分片

平衡完成后,集群将达到您定义的状态。

<块引用>

区域不能共享范围,也不能有重叠范围。

区域必须是相互排斥的。否则 Mongo 将无法决定将数据放在哪里。

注意 stage1 的分片 1 与 stage3 的分片 1 没有任何关系。一旦我们理解了这一点,事情就会变得更加清晰。

参考这个doc 一旦你看到我的解释,我希望它能让你明白。