我是MongoDB新手,我正试图了解这两种技术是如何协同工作的:
对数据库使用复制时,有一个主节点和一堆辅助节点。为了确保一致性,建议您始终从主节点读取,对吗?
因此,当您将复制与分片一起使用时,例如:
在不同的服务器上有两个副本r1和r2,分区由一个1到250的id和两个shard组成,shard 1有1-125,shard 2有126-250。
现在我的问题是:当使用分区和分片时,这意味着现在每个分片都有自己的主节点?所以,当从id为130的文档中读取信息时,我必须首先找出shard 2的主节点的位置?
例如:r1的主节点是1-125,次节点是126-250
R2的主节点为126-250,副节点为1-125
是这样吗?
每个副本仍然保留完整的数据库信息?
致意

最佳答案

对数据库使用复制时,有一个主节点和一堆辅助节点。为了确保一致性,建议您始终从主节点读取,对吗?
答案是yes和no。yes通常是从主节点读取,但如果从次节点读取,则有点延迟,但结果与从主节点读取几乎相同
不,您不需要检查要读取的主节点的位置,只需在连接字符串中指定replicaset,然后忘记replicaset。就像一个分贝
现在我的问题是:当使用分区和分片时,这意味着现在每个分片都有自己的主节点?
是的
所以,当从id为130的文档中读取信息时,我必须首先找出shard 2的主节点的位置?
不,当连接到集群时,你应该通过mongos连接到https://docs.mongodb.com/manual/reference/program/mongos/它将为你做任何事情,从查找哪个碎片包含你的数据、主节点等。使用mongos,你使用集群就像一个单独的数据库一样。
唯一你应该关心的是性能,你应该阅读并理解shard collection和shard keyhttps://docs.mongodb.com/manual/core/sharding-shard-key/
例如:r1的主节点为1-125,次节点为126-250。r2的主节点为126-250,secodary为1-125。是这样吗?
->错误,数据由shard key分隔,请参阅上面的详细信息。在这种情况下,如果使用id(1-250)作为shard key。
r1将在主服务器和辅助服务器中都包含1-125(辅助服务器是主服务器的备份,主服务器将被克隆到辅助服务器)
R2在一级和二级中也包含126-250(对于细节R2,一级包含126-250,二级包含126-250)。次节点是主节点的镜像)
每个副本仍然保留完整的数据库信息?
不,只有主碎片包含完整的数据库信息(https://docs.mongodb.com/manual/core/sharded-cluster-shards/#primary-shard
每个副本集都包含由shard key定义的shard collection的一部分。

关于mongodb - MongoDB Sharding +复制,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52921471/

10-11 12:50