我创build了一个程序来testing在Linux(Ubuntu)和Windows(Server2008)上的分片MongoDB性能。 由于插入大量的logging,Windows的磁盘的活动时间非常高(100%),然后性能非常差。 但在Ubuntu上,磁盘的util%为60%〜70%,性能比Windows好。 我可以在Linux上更好地说MongoDB的性能吗?
首先:Windows 2008服务器上的所有文件系统都非常非常低效。 与XFS或ext4相比,Windows和Linux文件系统都经过优化后,速度可以降低40%。
其次:延迟可能是一个问题。 当前Linux系统上的网络堆栈比在W2008服务器上要快。
第三:如果你的防火墙上运行着防火墙,延迟成为远程访问更大的问题。 尽管Linux的iptables
足够快而且高效,以至于大部分的防火墙设备都基于它,但由于各种原因,可用于Windows的防火墙并非如此。
另外:Windows不像Linux那样有效。 MongoDB使用尽可能多的RAM(直到它需要的地方),例如将索引文件(副本)存储在RAM中。 Windows需要比Linux机器更大的可用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生产的一个非常糟糕的想法。
你可以说MongoDB在Linux上的性能比Windows好,因为与其他许多数据库不同,MongoDB在很大程度上依赖于操作系统来执行内存映射文件操作。 正如在前面的回答中提到的那样,Windows server 2008 FS比Linux FS(ext4)慢很多,那么它确实有意义,MongoDB在Linux上的表现会比Windows好。 这也取决于你是否有32位或64位系统。