Ste*_*nie 84
在缩放MongoDB的上下文中:
复制会创建数据的其他副本,并允许自动故障转移到另一个节点.如果您可以读取可能不是最新的数据,则复制可能有助于水平扩展读取.
通过使用分片键在多个服务器之间划分数据,分片允许数据写入的水平扩展.到是很重要的选择一个好的片键.例如,糟糕的分片键选择可能导致数据的"热点"仅写在单个分片上.
分片环境确实增加了复杂性,因为MongoDB现在必须管理分片之间的分发数据和请求 - 添加了额外的配置和路由过程来管理这些方面.
通常组合复制和分片以创建分片群集,其中每个分片都由副本集支持.
从客户端应用程序的角度来看,您还可以对复制/分片交互进行一些控制,尤其是:
MrK*_*urt 36
复制是一种主要是传统的主/从设置,数据同步到备份成员,如果主要故障,其中一个可以取代它.这是一个相当简单的工具.它主要用于冗余,但您可以通过添加副本集成员来扩展读取.这有点复杂,但对某些应用程序效果很好.
通常,Sharding位于复制之上.MongoDB中的"Shards"只是副本集,前面有一个叫做"路由器"的东西.您的应用程序将连接到路由器,发出查询,并将决定将事物转发到哪个副本集(分片).它比单个副本集复杂得多,因为您需要处理路由器和配置服务器(这些服务器会跟踪存储在哪里的数据).
如果你想水平缩放Mongo,你就会分片.10gen喜欢调用路由器/配置服务器设置自动分片.你可以做一个更多的贫民窟形式的分片,你可以让应用程序决定写入哪个数据库.
小智 34
考虑到您的硬盘上有很棒的音乐收藏,您可以根据不同文件夹中的发行年份按逻辑顺序存储音乐.您担心如果驱动器发生故障,您的收集将会丢失.因此,您将获得一个新磁盘,并偶尔复制整个集合,保持相同的文件夹结构.
分片>>将音乐文件保存在不同的文件夹中
复制>>将您的集合同步到其他驱动器
xam*_*mir 18
Sharding是一种在多个服务器之间拆分大型集合的技术.当我们分片时,我们部署多个mongod
服务器.而在前面,mongos
这是一个路由器.该应用程序与此路由器通信.然后该路由器与各种服务器进行通信mongod
.应用程序和mongos
通常位于同一服务器上.我们可以mongos
在同一台机器上运行多个服务.还建议保留多个mongod
s(一起称为副本集)的集合,而不是mongod
每个服务器上的一个单独.副本集使数据在几个不同的实例中保持同步,这样如果其中一个出现故障,我们就不会丢失任何数据.逻辑上,每个副本集可以被看作是一个分片.它对应用程序是透明的,MongoDB
选择分片的方式是我们选择分片键.
假设,对于student
集合,我们将其stdt_id
作为分片键,或者它可以是复合键.而mongos
服务器,它是一个基于范围的系统.因此,基于stdt_id
我们作为分片键发送的内容,它会将请求发送到正确的mongod
实例.
那么,作为开发人员,我们需要真正了解什么呢?
insert
必须包含一个分片键,所以如果它是一个多分区的分片键,我们必须包含整个分片键update
,remove
,find
-如果mongos
没有给出碎片关键-那么它不得不广播要求所有包括收集不同的碎片.update
- 如果我们不指定整个分片键,我们必须使它成为多重更新,以便它知道它需要广播它无论何时考虑分片或复制,都需要在编写器/更新操作的上下文中进行思考.如果您不需要扩展写入,那么复制(因为它相当简单)对您来说是一个不错的选择.
另一方面,如果您的工作负载主要是更新/写入,那么在某些时候您将遇到写入瓶颈.如果写入请求,Mongo会阻止其他写入请求.那些写请求阻塞直到第一个请求完成.如果要缩放此写入并希望并行化,则需要实现分片.
小智 5
只是为了把这个放在某个地方......
运行 mongo 的最基本方法是作为独立服务器。
mongod
对于这张照片,我没有包括“客户”。检查下一张。
副本集的初始化在红色边框框中表示。
mongos
而不是mongod
. 这是一个用于客户端查询的路由器。显而易见:权衡是更复杂的架构。 新颖性:配置服务器(同样,不同的配置文件)。
还有更多内容需要补充,但除了文字之外,图片内容基本相同。
甚至 mongoDB 也建议在进行分片之前仔细研究您的案例。在水平缩放 (hs)之前至少进行一次垂直缩放 (vs) 可能是一个好主意。
vs 已完成硬件升级(CPU、RAM 等)。hs 需要更多的计算机(但可能是便宜的计算机)。
归档时间: |
|
查看次数: |
31364 次 |
最近记录: |