【问题标题】:MongoDB Sharding + ReplicationMongoDB分片+复制
【发布时间】:2019-03-26 01:31:50
【问题描述】:

我是 MongoDB 新手,我正在尝试了解这两种技术如何协同工作:

当为您的数据库使用复制时,您有一个主节点和一堆辅助节点。为确保一致性,建议您始终从主节点读取,对吧?

因此,例如,当您使用带分片的复制时: 您在不同的服务器中有 2 个副本 r1 和 r2,分区由 1 到 250 的 id 和 2 个分片组成,分片 1 具有 1 - 125,分片 2 具有 126 - 250。

现在我的问题是:当使用分区和分片时,这意味着现在每个分片都有自己的主节点吗?所以当从 id 为 130 的文档中读取信息时,我必须首先找出分片 2 的主节点在哪里?

例如:r1 的主节点为 1-125,辅助节点为 126-250

r2 有 126-250 的主节点和 1-125 的辅助节点

对吗?

每个副本仍然保留完整的数据库信息?

最好的问候

【问题讨论】:

    标签: mongodb replication sharding


    【解决方案1】:

    当为您的数据库使用复制时,您有一个主节点和一堆辅助节点。为确保一致性,建议您始终从主节点读取,对吗?

    答案是肯定的和否定的。是的,您通常从主节点读取,但如果您从辅助节点读取,则有点延迟,但结果与从主节点读取的结果几乎相同

    不,您无需检查要读取的主节点在哪里,只需在连接字符串中指定副本集,然后忘记副本集。就像单个数据库一样使用它

    现在我的问题是:当使用分区和分片时,这意味着现在每个分片都有自己的主节点吗?

    是的

    所以当从 id 为 130 的文档中读取信息时,我必须先找出分片 2 的主节点在哪里?

    不,当连接到集群时,您应该通过 mongos https://docs.mongodb.com/manual/reference/program/mongos/ 进行连接,它会为您完成所有工作,包括查找包含您的数据、主节点等的分片。使用 mongos,您可以像使用单个数据库一样使用集群。

    你唯一应该关心的是你应该阅读和理解的性能,关于分片收集和分片键https://docs.mongodb.com/manual/core/sharding-shard-key/

    例如:r1 的主节点为 1-125,辅助节点为 126-250。 r2 具有 126-250 的主节点和 1-125 的辅助节点。对吗?

    -> 错误,数据由分片键分隔,详情请阅读上文。在这种情况下,如果您使用 id (1 - 250) 作为分片键。

    • r1 将在主要和次要中包含 1-125(次要是主要的备份,主要将克隆到次要)
    • r2 在主节点和次节点中也将包含 126 - 250(详细说明 r2 主节点包含 126 - 250,r2 辅助节点也包含 126 - 250。辅助节点是主节点的镜像)

    每个副本仍然保留完整的数据库信息?

    不,只有主分片包含完整的数据库信息 (https://docs.mongodb.com/manual/core/sharded-cluster-shards/#primary-shard) 每个副本集都包含由分片键定义的分片集合的一部分。分片集合是您想要在多台机器上分离以提高性能的大表

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-29
      • 1970-01-01
      • 1970-01-01
      • 2021-08-21
      • 2013-11-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多