MongoDB上分片和复制的区别
我只是混淆了分片和复制的工作原理。根据定义 复制: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上分片和复制的区别,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
由于副本集是75GB,但碎片是25GB,那么它们如何才能等效…这让我很困惑…我想我错过了一些伟大的东西在这方面。请帮我个忙。让我们试试这个类比。你在管理图书馆 就像任何一个管理图书馆的人一样,图书馆里也有书。你把所有的书都放在书架上。这是好的,但你的图书馆变得如此之好,以至于你的对手想要烧毁它。所以你决定在其他地方多做一些架子。有一个最重要的书架,每当你添加一些新书时,你都会快速地将相同的书添加到其他书架上。现在,如果竞争对手破坏了一个书架——这不是问题,你只要打开另一个书架,把它和书一起复制就行了 这是复制(只要用应用程序替换库,用服务器替换书架,用收藏中的文档替换书籍,您的竞争对手就是服务器上出现故障的HDD)。它只是制作数据的附加副本,如果出现问题,它会自动选择另一个主副本 如果您愿意,这个概念可能会有所帮助
- 希望缩放读取(但它们可能落后于主读取)李>
- 执行一些不接触主服务器的脱机读取
- 从特定区域的服务器为特定区域提供部分数据
- 但复制背后的主要原因是数据可用性。因此,这里您是对的:如果您有75Gb的数据,并使用2个辅助设备进行复制,您将获得75*3GB的数据
- 分配工作量
- 能够保存比单台服务器更适合的数据
- 你能减少事情吗
- 在ram中存储更多数据以加快查询速度
事实并非如此。但是,如果要进行分片,则必须为每个分片创建一个复制。因为碎片越多,至少有一个碎片死亡的可能性就越大 我写这封信是为了回答问题,但实际上这是对萨尔瓦多先生的回答的一个问题 正如您所说,在分片过程中,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倍。所以它几乎类似于分区。切分有助于快速访问数据 现在让我们来看看复制品