MongoDB上的Sharding和复制之间的区别

Saa*_*adi 12 replication sharding mongodb

我只是混淆了它们如何工作的Sharding和复制......根据定义

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

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

根据我的理解,如果有75 GB的数据然后通过复制(3台服务器),它将在每台服务器上存储75GB数据意味着服务器1上75GB,服务器2上75GB和服务器3上75GB.(纠正我如果我错了)..并且通过分片将它存储为服务器-1上的25GB数据,服务器-2上的25Gb数据和服务器-3上的25GB数据.(对吗?)...但是后来我遇到了这一行教程

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

副本设置为75GB但碎片为25GB,那么它们是如何相同的......这让我感到很困惑......我想我错过了一些很棒的东西.请帮帮我.

Sal*_*ali 27

让我们尝试这个比喻.您正在运行该库.

任何正在运行图书馆的人都会在图书馆中拥有图书.您将所有书籍存放在书架上.这很好,但你的图书馆变得非常好,你的对手想要烧它.因此,您决定在其他地方制作许多额外的货架.有一个最重要的架子,无论何时添加一些新书,您都可以快速将相同的书籍添加到其他书架.现在,如果竞争对手摧毁了一个架子 - 这不是问题,你只需打开另一个并将其与书籍一起复制即可.

这是复制(只需用应用程序替换库,带有服务器的架子,带有文档的书籍,你的竞争对手只是服务器上的硬盘故障).它只是制作了额外的数据副本,如果出现问题,它会自动选择另一个主数据库.

如果你这个概念可能有所帮助

  • 想要扩大读数(但它们可能落后于初级读数).
  • 做一些不接触主服务器的离线读取
  • 从特定区域的服务器为特定区域提供部分数据
  • 但复制背后的主要原因是数据可用性.所以在这里你是对的:如果你有75Gb的数据并用2个辅助数据复制它 - 你将得到75*3 Gb的数据.

看看另一个场景.没有竞争对手,所以你不想复制你的货架.但是现在你还有另外一个问题.你变得如此优秀以至于一个架子还不够.您决定在多个货架之间分发您的图书.您决定根据作者姓名在架子之间分发它们(这不是一个好主意,并在此处阅读如何选择分片键).因此,所有以名称少于K开头的东西都会进入一个架子,一切就是K,而更多就是另一个架子.这是分片.

这个概念可以帮助您:

  • 分配工作量
  • 能够保存更多,然后可以放在单个服务器上的数据
  • 做地图 - 减少事情
  • 在ram中存储更多数据以加快查询速度

在这里你部分正确.如果你有75Gb,那么在所有服务器上总和仍然会有75 Gb,但它不一定是平均分配的.

但这是一个只有分片的问题.现在你的竞争对手出现了,他只是来到你的一个货架上烧了它.该架子上的所有数据都将丢失.所以你也希望复制每个分片.基本上是这个概念

每个分片都是副本集

不是真的.但是如果要进行分片,则必须为每个分片创建一个复制.因为你拥有的碎片越多,至少有一个碎片的概率就越大.