mongodb - MongoDB 上分片和复制的区别

标签 mongodb replication sharding

我只是对它们如何工作的分片和复制感到困惑..根据定义

Replication: A replica set in MongoDB is a group of mongod processes that maintain the same data set.

Sharding: Sharding is a method for storing data across multiple machines.

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

Shards store the data. To provide high availability and data consistency, in a production sharded cluster, each shard is a replica set

由于副本集为 75GB,但分片为 25GB,那么它们如何等效...这让我很困惑...我想我错过了一些很棒的东西。请帮帮我。

最佳答案

让我们试试这个类比。您正在运行库。

作为拥有图书馆的任何人,您在图书馆里都有书籍。你把所有的书都放在书架上。这很好,但你的图书馆变得如此之好,以至于你的对手想要烧掉它。所以你决定在其他地方多做很多架子。有一个最重要的书架,每当您添加一些新书时,您都会快速将相同的书添加到其他书架。现在,如果竞争对手破坏了一个书架 - 这不是问题,您只需打开另一个书架并将其与书籍一起复制即可。

这是复制(只需将库替换为应用程序,将书架替换为服务器,将书替换为集合中的文档,而您的竞争对手只是服务器上的 HDD 出现故障)。它只是制作数据的额外副本,如果出现问题,它会自动选择另一个主节点。

这个概念可能对你有所帮助

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

看看另一个场景。没有竞争对手,所以你不想复制你的货架。但是现在你有另一个问题。你变得如此优秀以至于一个架子还不够。您决定在许多书架之间分发您的书籍。您决定根据作者姓名将它们分布在不同的书架之间(这不是一个好主意,请在此处阅读如何 select sharding key)。因此,所有以名称小于 K 开头的东西都放在一个架子上,所有 K 和更多的东西都放在另一个架子上。这是分片

这个概念可能对你有所帮助:

  • 分配工作负载
  • 能够保存比单个服务器更大的数据
  • 做 map-reduce 的事情
  • 在内存中存储更多数据以加快查询速度

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

但这里只有分片存在问题。现在你的对手出现了,他刚刚来到你的一个架子前烧掉了它。该架子上的所有数据都将丢失。所以你也想复制每个分片。基本上是

each shard is a replica set

不正确。但是如果你正在做分片,你必须为每个分片创建一个复制。因为你拥有的碎片越多,至少有一个死亡的可能性就越大。

关于mongodb - MongoDB 上分片和复制的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19720010/

相关文章:

ruby-on-rails - 带空格的mongoid数组

MongoDB 索引建议工具

php - 如何使用 php 取消设置 mongodb 中的所有记录字符串?

sql-server - SQL Server 差异更新

sql-server - DDL 语句不会在 SQL 上复制

java - 如何在 Spring MVC 的 contextConfigLocation 中设置 MongoDB ReadPreference

Mongodb分片: Chunk split failed with Hashed Shard Key

javascript - Mongoose 独特的结果

sql-server - 通过一些数据转换创建 Sql 服务器复制(期间或结束时)

MongoDB 分片键