9

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

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

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

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

很抱歉这里的所有细节,但这些是我们在计划部署时必须考虑的主要因素。鉴于 Mongo 倾向于获取所有可用内存,并且它将在最大内存为 24GB 的机器上运行,我们正在尝试为我们的数据库制定最佳生产配置。

所以这就是我们的选择:

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

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

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

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

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

4

1 回答 1

5

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

  1. 激活directoryPerDB配置选项
  2. 创建您需要的数据库。
  3. 关闭实例。
  4. 将数据从各个数据库目录复制到不同的块设备(磁盘、RAID 阵列、逻辑卷、iSCSI 目标等)。
  5. 将相应的块设备安装到dbpath目录之外的相应位置(不要忘记将相应的行添加到/etc/fstab!)
  6. 重启 mongod。

编辑:作为旁注,我想补充一点,您不应该将 Windows 用作生产 MongoDB 的操作系统。与 ext4 或 XFS 相比,可用的文件系统 NTFS 和 ReFS 的性能非常糟糕(后者是建议用于生产的文件系统,有关详细信息,请参阅MongoDB 生产说明)。仅出于这个原因,我建议使用 Linux。另一个原因是相当不必要的 Windows 子系统(如 GUI)使用的 RAM。

于 2014-12-25T12:57:53.603 回答