如何理解"碎片是副本集。"

时间:2014-08-01 09:16:09

标签: mongodb replication sharding

当我把碎片和副本集放在一起时,我很困惑。 为什么引用说碎片是副本集? 副本集是否包含分片? 有人可以给我一个概念性的解释吗?

4 个答案:

答案 0 :(得分:2)

分片发生在复制之上一层。

当您同时使用分片和复制时,您的群集包含许多副本集,并且一个副本集由许多mongod实例组成。

但是,也可以创建一个独立的mongod实例集群,这些实例不会被复制,或者只有一些分片被实现为副本集,而某些分片被实现为独立的mongod实例。

答案 1 :(得分:1)

每个分片都是副本集,而不是分片是副本集。

这是一个语言障碍,在英语中说这样的事情真的意味着和#34;每个分片都是副本集"在这种情况下。

所以要解释一下,假设你有一个名字a-z的集合。碎片1持有a-b。此分片也是副本集,这意味着它还具有自动故障转移和该范围的复制。因此,在这种意义上的分片是一个高级副词,高于副本集。

答案 2 :(得分:1)

副本集是一组MongoDB服务器,它实现了主从实现。因此,基本上相同的数据在多个副本之间共享,即主服务器和从服务器。 Master也称为主节点,Slave(s)被视为辅助节点。 它在多个mongo实例上复制您的数据以解决/避免故障转移。每当主节点关闭时,MongoDB也会自动在辅助节点之间执行主节点选举。

Sharding用于在多台计算机之间存储大型数据集。所以基本上,如果你只是想比较Sharded节点不会/可能不包含相同的数据,其中Relicated节点包含相同的数据。 分片具有不同的用途,大型数据集分布在多台机器上。

现在,这个大型数据集的子集也可以作为主要和次要复制到多个节点,以克服故障转移。所以基本上碎片可以有多个副本集。这些碎片的副本集包含大数据集的数据子集。 因此,多个分片可以完成以块的形式分离的整个大数据集。可以使用副本集在Shard中复制这些块。

您还可以在MongoDB手册中获得与此相关的更多详细信息。

答案 3 :(得分:0)

碎片用于打破集合并将其中的部分存储在不同的位置。分片不必是副本集,它可以是单个服务器,但为了实现可靠性并避免数据丢失,副本集可以用作分片而不是单个服务器。因此,如果副本集中的一个服务器发生故障,其他服务器仍将保留数据。