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

时间:2013-06-29 21:02:34

标签: mongodb memory database

我正在开发一个应用程序,其中“热”数据和其他数据之间的使用模式存在巨大差异。我们选择了MongoDB作为我们的数据存储库,在大多数情况下,它似乎是我们正在构建的应用程序的绝佳匹配。

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

系统还将保留记录版本,审计跟踪,客户交互,通知记录等。这将很少被引用,并且可能会变得非常大。我们希望将它放在更传统的旋转磁盘上,因为它很少被访问(我们猜测一个典型的记录可能每年访问四次或五次,并且只需要满足研究和客户服务咨询),并且可能会变得非常大。

我没有找到任何参考资料,表明MongoDB是否允许我们在不同的磁盘上放置不同的数据库(在Windows下运行mongod,但在我们投入生产时不一定是这种情况)。

对此处的所有详细信息感到抱歉,但这些是我们计划部署时必须考虑的主要因素。鉴于Mongo倾向于获取所有可用内存,并且它将在最大容量为24GB内存的计算机上运行,​​我们正在尝试为我们的数据库设计出最佳的生产配置。

以下是我们的选择:

  • 具有多个数据库的Mongo的单个实例这似乎具有简单性的优势,但我仍然没有找到关于如何将数据库拆分到不同物理驱动器上的任何确定答案机。

  • 两个Mongo实例,一个用于“热门”数据,另一个用于存档。我不确定Mongo将如何处理mongod竞争资源的两个实例,但我们认为,由于32位版本的服务器限制为2GB的内存,我们可以将它用于存档的东西,而无需它压倒了机器的资源。对于“热”数据,我们可以轻松配置数据库引擎的64位实例以使用SSD阵列,并且考虑到我们的数据相对较小,整个数据库和索引可以直接进行内存映射而不会出现页面错误

  • Mongo在两个独立的虚拟机中的两个实例可以使用VMWare或类似的东西来创建两个可以单独托管Mongo的Linux机器。虽然它可能会稍微增加管理负担,但在我看来,这似乎提供了对系统资源使用情况的最精细控制,同时仍然保留了Windows Server主机足够的内存来运行IIS及其自己的进程。

但所有这些都是猜测,因为我们之前没有人曾经做过重大的MongoDB部署,所以我们没有很好的经验基础可供借鉴。

我的实际问题是,是否有选项可以让同一个mongod服务器实例中的两个数据库使用完全独立的驱动器。但是,我们也欢迎任何洞察我们三个已确定的部署选项的优缺点。

1 个答案:

答案 0 :(得分:4)

使用Linux时,这实际上是一件非常容易的事情:

  1. 激活directoryPerDB配置选项
  2. 创建您需要的数据库。
  3. 关闭实例。
  4. 将各个数据库目录中的数据复制到不同的块设备(磁盘,RAID阵列,逻辑卷,iSCSI目标等)。
  5. 将相应的块设备安装到dbpath目录之外的相应位置(不要忘记将相应的行添加到/etc/fstab!)
  6. 重启mongod。
  7. 编辑:作为旁注,我想补充一点,你不应该将Windows用作生产MongoDB的操作系统。与ext4或XFS(后者是用于生产的建议文件系统,请参阅MongoDB production notes for details)相比,可用文件系统NTFS和ReFS执行得非常糟糕。仅仅因为这个原因,我建议使用Linux。另一个原因是Windows使用的是非常不必要的子系统,比如GUI。