6

我创建了一个程序来测试分片 MongoDB 在 Linux(Ubuntu)和 Windows(Server2008)上的性能。由于插入了大量记录,Windows 的磁盘活动时间非常高(100%),性能非常差。但在 Ubuntu 上,磁盘的 util% 为 60%~70%,性能优于 Windows。我可以说 MongoDB 在 Linux 上的性能更好吗?

4

2 回答 2

13

首先:Windows 2008 服务器上可用的所有文件系统都非常非常低效。与 XFS 或 ext4 相比,当 Windows 和 Linux 文件系统都进行了优化时,它们的速度降低了 40%。

第二:延迟可能是一个问题。当前 Linux 系统上的网络堆栈简直比 W2008 服务器上的要快。

第三:如果您的机器上运行了防火墙,则延迟成为远程访问的更大问题。虽然 Linux'iptables足够快速和高效,以至于大部分防火墙设备都基于它,但出于各种原因,可用于 Windows 的防火墙却不是。

另外:Windows 在 RAM 上的效率不如 Linux。MongoDB 使用尽可能多的 RAM(直到它需要的点),例如用于在 RAM 中存储(副本)索引文件。与 Linux 机器相比,Windows 占用的可用 RAM 份额要大得多。因此,索引文件可能从磁盘读取,而不是从 RAM 读取,这要慢几个数量级。

底线:在 Windows 系统上运行生产 mongoDB 是一个非常糟糕的主意™。

编辑

根据评论中的要求:

您可能已经认识到我引用了 Principled Technologies 的三份报告。虽然我与他们没有任何关系,但恕我直言,他们通过使用行业标准基准测试并针对相关任务显式优化两个操作系统以及使用开箱即用的操作系统,在比较 RHEL 6 和 Windows Server 2012 方面做得很好。

有人可能会争辩说,这种比较并不能证明所有 GNU/Linux 发行版都比 Windows Server 2012 更快,我们正在谈论的功能是由 Linux 内核提供的,通常不会被修改,因此可以安全地假设类似所有主要分布都可以预期结果。

凭借 Linux 的部分极端性能优势(Linux 的 TCP 堆栈对于大消息大小几乎是 Windows Server 的 4 倍,这在数据库应用程序中往往是这种情况),我重申我的断言,它在 Windows 系统上运行生产 MongoDB 是一个非常糟糕的主意™。

于 2014-06-12T15:12:05.930 回答
1

可以说 MongoDB 在 Linux 上的性能优于 Windows,因为与许多其他数据库不同,MongoDB 严重依赖操作系统来执行这里提到的内存映射文件操作。正如前面的回答中提到的,Windows server 2008 FS 比 Linux FS (ext4) 慢得多,那么 MongoDB 在 Linux 上的性能会比 Windows 更好。它还取决于您使用的是 32 位还是 64 位系统。

于 2015-09-27T20:05:01.320 回答