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]

最佳答案

在大多数情况下,与每台机器运行一个mongod进程相比,每台物理机器运行多个mongod进程(作为副本集或作为不同碎片的碎片服务器)不会提高写入性能。只要数据(即经常访问的数据)和索引的“工作集”符合RAM,MongoDB在并发写场景下的性能将非常好——如果每台机器只有一个mongod,则mongod可以访问所有RAM;如果有更多,则它们最终将与一个另一个是有限的资源。
在特殊情况下,例如您的物理机器上有很多多余的容量,运行多个mongods可能是有益的,因为它们可以更好地利用机器上可用的资源。

10-06 16:04