MongoDB:不同的数据库可以放在不同的驱动器上吗?

10

我在开发一个应用程序,其中“热”数据和其他数据的使用模式有很大差异。我们选择了MongoDB作为数据存储库,在大多数方面,它似乎非常适合我们正在构建的应用程序。

问题在于:将有一个中央文档存储库,必须经常搜索和访问:其大小现在约为2 GB,并且在未来几年内将增长到4 GB。为了提高性能,我们将把该数据库放在服务器级镜像SSD阵列上,并且考虑到数据的总大小,不认为内存会成为问题。

系统还将记录版本、审计跟踪、客户互动、通知记录等等,这些资料仅偶尔被引用,而且可能会变得相当庞大。我们希望将其放在传统的旋转硬盘上,因为它只会偶尔被访问(我们估计每年典型记录可能会被访问四到五次),并且可能会变得相当庞大。

我没有找到任何参考资料表明MongoDB是否允许我们将不同的数据库放置在不同的磁盘上(我们在Windows下运行mongod,但这不一定是在生产环境中也是这样)。

很抱歉这里有这么多细节,但这些是我们在部署计划时必须考虑的主要因素。考虑到Mongo对于占用所有可用内存的倾向,以及它将在最大内存为24 GB的机器上运行,我们正在尝试为我们的数据库找出最佳生产配置。

因此,这是我们的选择:

  • 使用单个Mongo实例管理多个数据库 这似乎非常简单,但我仍然没有找到任何明确的答案来说明如何将数据库拆分到机器上的不同物理驱动器中。

  • 两个Mongo实例,一个用于“热”数据,另一个用于归档数据。我不确定Mongo是否能够处理两个mongod实例竞争资源的情况,但我们认为,由于服务器的32位版本仅限于2GB内存,我们可以将其用于归档数据,而不会超出机器资源的承受范围。对于“热”数据,我们可以轻松配置一个64位的数据库引擎实例来使用SSD阵列,考虑到我们的数据相对较小,整个数据库和索引都可以直接内存映射而避免页面故障。

  • 在两个独立的虚拟机中运行两个Mongo实例。我们可以使用VMWare或类似软件来创建两台Linux机器,分别托管Mongo。虽然这可能会增加一些管理负担,但在仍然使Windows Server主机有足够的内存运行IIS和自己的进程的同时,这似乎提供了对系统资源使用最细粒度的控制。

  • 但这都是推测,因为我们之前从未进行重要的MongoDB部署,所以我们没有很好的经验基础。我的实际问题是是否有选项可以使同一个mongod服务器实例中的两个数据库完全利用不同的驱动器。但我们对我们确定的三种部署选项的优劣势的任何见解都将受到欢迎。


    1
    是的,http://docs.mongodb.org/manual/reference/configuration-options/#directoryperdb - WiredPrairie
    我在搜索中确实遇到了这个问题,但它似乎不适用于Windows,因为磁盘是离散的:你提供的选项将允许Mongo在一个公共文件夹下创建不同的文件夹。也许可以通过将物理磁盘挂载到目录路径来临时解决这个问题,在较新的Windows服务器版本中似乎支持这种方法,但我从未尝试过。 - Curt
    是的,您可以将驱动器挂载为路径。这应该适用于此并值得尝试。我相信它基本上与Linux中的操作相同。 - WiredPrairie
    1
    更新链接(对应现在称为storage.directoryPerDb选项):http://docs.mongodb.org/manual/reference/configuration-options/#storage.directoryPerDB - dpb
    1
    @dpb 谢谢!这解决了我一些问题,即使是一年后! - Curt
    在Windows机器上运行mongod的生产实例是一个非常糟糕的想法™。Windows可用的文件系统至少比ext4或xfs慢30%(参见http://de.slideshare.net/PrincipledTechnologies/comparing-file-system-performance-red-hat-enterprise-linux-6-vs-microsoft-windows-server-2012),而Linux推荐用于生产的文件系统(请参阅http://docs.mongodb.org/manual/administration/production-notes/#kernel-and-file-systems)。更不用说为GUI浪费的内存量了。 - Markus W Mahlberg
    1个回答

    6
    在Linux操作系统下执行以下步骤非常容易:
    1. 启用 directoryPerDB 配置选项
    2. 创建所需的数据库。
    3. 关闭mongod实例。
    4. 将各个数据库目录中的数据复制到不同的块设备(磁盘,RAID阵列,逻辑卷,iSCSI目标等)。
    5. 将相应的块设备挂载到其对应的位置(超出dbpath目录,不要忘记添加相应的行到/etc/fstab!)
    6. 重启mongod。

    编辑:另外需要注意的是,生产环境下不建议使用Windows作为MongoDB的操作系统。Windows可用的文件系统NTFS和ReFS与ext4或XFS相比性能差得多(后者是生产环境中建议使用的文件系统,请参见MongoDB生产笔记)。光这一点就足以建议选择Linux了。另一个原因是Windows使用了相当多不必要的子系统,如GUI,消耗的RAM也相应增加。


    实际上,Windows Server 2012是推荐的平台之一,用于在生产环境中运行MongoDB - Artur Gaspar
    1
    可以在Windows Server 2012上运行MongoDB。但是,从各种原因来看,它并不是最佳平台。与Linux相比,网络堆栈效率不高,可用的文件系统不如Linux优秀,LVM快照(“Linux卷管理系统”)无法作为备份方法(如果数据达到几百GB,则使用mongodump等工具会很麻烦),而且毫无用处的GUI会消耗系统资源,即使在中等规模的集群中,这些资源也可能相当于整个机器的资源。 - Markus W Mahlberg

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接