2012-01-11 29 views
1

MongoDB使用主从复制,这意味着所有写入都转到单个主节点(从属服务器只是备份或备用服务器,或者可以提供不必绝对当前的读取服务)。传播Mongo写入的物理服务器是否比物理服务器更有意义?

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] 
+0

我刚刚在2晚前观看了mongodb网站上的分片和复制视频。真的很棒的信息。这听起来就像驱动器的RAID5配置,每个驱动器都包含其他驱动器的奇偶校验信息。如果这有什么好处,我也会很有兴趣知道。 – jdi 2012-01-11 02:05:25

+0

我的预感是,这可能不是一个好主意,因为它会减少可用于主设备的RAM。 Mongo喜欢RAM。 – Thilo 2012-01-11 02:07:16

+0

虽然系统中有大量内存,但也许没关系? – jdi 2012-01-11 02:08:48

回答

1

在大多数情况下,运行多个每个物理机mongod过程(或者作为设置一个复制品或作为不同碎片碎片服务器)相比运行每台机器的单个mongod不增加写入性能。只要“工作集”数据(即经常访问的数据)和索引适合内存,MongoDB在并发写入场景下的表现会非常好 - 如果每台机器只有一个mongod,那么mongod可以访问所有的RAM;如果你有更多,他们最终会争夺有限的资源。

在特殊情况下(例如,如果物理机器上存在大量过剩容量),运行多个mongod可能会有所帮助,因为它们可以更好地利用机器上可用的资源。

+0

“在并发写入场景下,MongoDB将表现得非常好”。是否有任何基准测试数据集完全在RAM中(但启用了日志记录功能)的吞吐量? – Thilo 2012-01-11 23:55:39

+0

基准测试非常困难,因为它非常依赖于您系统的变量:读/写混合,文档大小,写入频率,总数据大小等。最好的选择是使用您的应用程序的真实数据加载测试。 – dcrosta 2012-01-12 22:48:00