我在开发一个应用程序,其中“热”数据和其他数据的使用模式有很大差异。我们选择了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服务器实例中的两个数据库完全利用不同的驱动器。但我们对我们确定的三种部署选项的优劣势的任何见解都将受到欢迎。