【问题标题】:Does it make sense to have more shards than physical servers to spread Mongo writes?拥有比物理服务器更多的分片来传播 Mongo 写入是否有意义?
【发布时间】:2012-01-11 01:44:40
【问题描述】:

MongoDB 使用主从复制,这意味着所有写入都转到单个主节点(从节点只是备份或备用,或者可以提供不需要绝对最新的读取)。

MongoDB 还具有分片功能,可将数据拆分为分片,每个分片都有自己的复制集(即它们自己的主节点)。因此,如果写入均匀分布在分片上,写入性能就会提高。

到目前为止,我只考虑将分片作为横向扩展选项:添加更多机器来托管分片。

在同一台机器上拥有多个分片也只是为了分散写入是否有意义?

Machine A:   [Shard A Master] [Shard B Replica]
Machine B:   [Shard B Master] [Shard C Replica]
Machine C:   [Shard C Master] [Shard A Replica]

【问题讨论】:

  • 两天前我刚刚在 mongodb 网站上观看了分片和复制的视频。真的很棒的信息。这听起来就像驱动器的 RAID5 配置,其中每个驱动器都包含其他驱动器的奇偶校验信息。我也很想知道这是否有任何好处。
  • 我的直觉是这可能不是一个好主意,因为它会减少主机可用的 RAM。 Mongo 喜欢 RAM。
  • 虽然如果系统中有足够的内存,那也许没关系?
  • 有点 OT 但是:最好使用raid 6(即raid 5 加上一个几百美元的备用磁盘)。刚刚进行了 raid 5 设置降级,Linux 进入只读模式,不适合生产设置 :)

标签: mongodb replication scaling sharding


【解决方案1】:

在大多数情况下,与每台机器运行单个 mongod 相比,在每台物理机器上运行多个 mongod 进程(作为副本集或作为不同分片的分片服务器)不会提高写入性能。只要数据的“工作集”(即频繁访问的数据)和索引适合 RAM,MongoDB 将在并发写入场景下执行得非常好——如果每台机器只有一个 mongod,则 mongod可以访问所有 RAM;如果你有更多,他们最终会为了有限的资源相互竞争。

在特殊情况下,例如,如果您的物理机器上有很多多余的容量,运行多个mongods 可能是有益的,因为它们可以更好地利用机器上的可用资源。

【讨论】:

  • "MongoDB 在并发写入场景下会表现得非常好"。对于完全在 RAM 中(但启用了日志功能)的数据集的预期吞吐量,是否有任何基准?
  • 基准测试很困难,因为它非常依赖于系统的变量:读/写混合、文档大小、写入频率、总数据大小等。最好的选择是使用真实数据进行负载测试为您的应用程序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多