MongoDB 分片 + 复制

MongoDB Sharding + Replication

我是 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 的辅助节点

对吗?

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

此致

When using replication for you database, you have a primary node and a bunch of secondaries. To ensure consistency, it's recommended for you to always read from the primary node, right?

答案是肯定的,也不是。是的,您通常是从主节点读取,但如果您从辅助节点读取,它会有一点延迟,但结果与从主节点读取的结果几乎相同

不,您无需检查要读取的主节点在哪里,只需在连接字符串中指定副本集即可,而无需考虑副本集。就像单个 db

一样使用它

Now my questions: When using partitioning with sharding it means now that every shard have its own primary node?

So when reading information from document with id 130 I have to first find out where the primary node from the shard 2 is located?

不,当连接到集群时,您应该通过 mongos 连接 https://docs.mongodb.com/manual/reference/program/mongos/ 它会为您做所有事情,从查找包含您的数据的分片、主节点等。使用 mongos,您可以像使用集群一样使用集群单分贝。

您唯一应该关心的是性能,您应该阅读并了解有关分片集合和分片键的内容 https://docs.mongodb.com/manual/core/sharding-shard-key/

For example: r1 have the primary node for 1-125 and a secondary for 126-250. r2 have the primary node for 126-250 and secodnary for 1-125. Is that correct?

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

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

Every replica still keeps the full database information?

否,只有主分片包含完整的数据库信息 (https://docs.mongodb.com/manual/core/sharded-cluster-shards/#primary-shard) 每个副本集都包含由分片定义的分片集合的一部分 key.Shard 集合很大 table 你想在多台机器上分开以提高性能