MongoDB上分片和复制的区别

MongoDB上分片和复制的区别,mongodb,replication,sharding,Mongodb,Replication,Sharding,我只是混淆了分片和复制的工作原理。根据定义 复制:MongoDB中的副本集是一组维护相同数据集的mongod进程 分片:分片是一种跨多台机器存储数据的方法 根据我的理解,如果有75 GB的数据,那么通过复制(3台服务器),它将在每个服务器上存储75 GB的数据,即在服务器1上存储75 GB的数据,在服务器2上存储75 GB的数据,在服务器3上存储75 GB的数据。(如果我错了,请纠正我)…通过分片,它将在服务器1上存储25 GB的数据,在服务器2上存储25 GB的数据,在服务器3上存储25 GB

我只是混淆了分片和复制的工作原理。根据定义

复制:MongoDB中的副本集是一组维护相同数据集的mongod进程

分片:分片是一种跨多台机器存储数据的方法

根据我的理解,如果有75 GB的数据,那么通过复制(3台服务器),它将在每个服务器上存储75 GB的数据,即在服务器1上存储75 GB的数据,在服务器2上存储75 GB的数据,在服务器3上存储75 GB的数据。(如果我错了,请纠正我)…通过分片,它将在服务器1上存储25 GB的数据,在服务器2上存储25 GB的数据,在服务器3上存储25 GB的数据。(对吗?)…但后来我在教程中遇到了这一行

碎片存储数据。提供高可用性和高数据 一致性,在生产分片集群中,每个分片都是一个副本 设置


由于副本集是75GB,但碎片是25GB,那么它们如何才能等效…这让我很困惑…我想我错过了一些伟大的东西在这方面。请帮我个忙。

让我们试试这个类比。你在管理图书馆

就像任何一个管理图书馆的人一样,图书馆里也有书。你把所有的书都放在书架上。这是好的,但你的图书馆变得如此之好,以至于你的对手想要烧毁它。所以你决定在其他地方多做一些架子。有一个最重要的书架,每当你添加一些新书时,你都会快速地将相同的书添加到其他书架上。现在,如果竞争对手破坏了一个书架——这不是问题,你只要打开另一个书架,把它和书一起复制就行了

这是复制(只要用应用程序替换库,用服务器替换书架,用收藏中的文档替换书籍,您的竞争对手就是服务器上出现故障的HDD)。它只是制作数据的附加副本,如果出现问题,它会自动选择另一个主副本

如果您愿意,这个概念可能会有所帮助

  • 希望缩放读取(但它们可能落后于主读取)
  • 执行一些不接触主服务器的脱机读取
  • 从特定区域的服务器为特定区域提供部分数据
  • 但复制背后的主要原因是数据可用性。因此,这里您是对的:如果您有75Gb的数据,并使用2个辅助设备进行复制,您将获得75*3GB的数据
看看另一个场景。没有竞争对手,所以你不想复制你的书架。但现在你有另一个问题。你变得如此优秀,一个架子是不够的。你决定在许多书架之间分发你的书。您决定根据作者姓名在书架之间分发它们(这不是一个好主意,请在此处阅读如何分发)。所以所有以K开头的东西都会被放到一个架子上,所有以K开头的东西都会被放到另一个架子上。这是切分

这个概念可以帮助您:

  • 分配工作量
  • 能够保存比单台服务器更适合的数据
  • 你能减少事情吗
  • 在ram中存储更多数据以加快查询速度
在这里,你是部分正确的。如果您有75Gb,那么所有服务器上的总容量仍然是75Gb,但不一定要平均分配

但是这里有一个问题,就是只有切分。现在你的对手出现了,他只是来到你的一个架子前,把它烧掉了。那个架子上的所有数据都丢失了。所以你也要复制每个碎片。基本上,这个概念

每个碎片都是一个副本集


事实并非如此。但是,如果要进行分片,则必须为每个分片创建一个复制。因为碎片越多,至少有一个碎片死亡的可能性就越大

我写这封信是为了回答问题,但实际上这是对萨尔瓦多先生的回答的一个问题

正如您所说,在分片过程中,75 GB数据“可能”存储为服务器1上的25GB数据、服务器2上的25GB数据和服务器3上的25GB数据。(此分发取决于分片密钥)…然后为了防止丢失,我们还需要复制分片。因此,这意味着现在每个服务器都包含它的碎片,以及其他服务器上存在的其他碎片的复制。这意味着服务器-1将具有

1) 它自己的碎片

2) 服务器2上存在的碎片复制

3) 服务器3上存在的碎片复制


服务器2和服务器3也是如此。我说的对吗?如果是这样,那么每台服务器又有75GB的数据了。对还是错?

回答Saad的后续回答:

另外,您可以在同一台服务器上同时拥有碎片和副本,这不是推荐的做法。每个服务器在系统中都应该有一个角色。例如,如果您决定拥有2个碎片并将其复制3次,那么最终将拥有6台机器


我知道这听起来可能太贵了,但您必须记住,这是一种商品硬件,如果您提供的服务已经很好,以至于您考虑到高可用性,并且不适合一台机器,那么这是一个相当便宜的价格(与专用的一台大机器相比).

因为我们想要制作3个碎片,同时复制数据,所以下面是上述问题的解决方案

r有碎片和副本集,在这种情况下,该服务器的故障将导致副本集和碎片的丢失


但是,您可以将碎片1和副本集(碎片2和碎片3的副本)放在同一台服务器上,但这是不可取的。

碎片就像数据分区一样。 假设您有大约3GB的数据,并且您定义了3个分片,因此每个分片可能需要1GB的数据(这实际上取决于分片键) 为什么需要切分?在3GB范围内搜索特定数据比在1GB范围内搜索复杂3倍。所以它几乎类似于分区。切分有助于快速访问数据

现在让我们来看看复制品