处理 500GB MongoDb 数据库的专业架构

Professional architecture to handle a 500GB MongoDb database

我们有一个大型数据库,我想解释一下我们的设置有多基础。所以,我想知道如果你不是我们,你的架构是什么

  1. 560GB 是 MongoDb 的 /data/ 文件夹的总大小(因此纯数据大小要低得多)
  2. 数据库服务器和 Web 服务器托管在单个专用服务器上
  3. 不存在 SSD
  4. OS 是 Windows 服务器 2012
  5. MongoDb 是 运行 作为单个实例,只是作为一个 EXE 文件
  6. 据估计,平均每分钟大约有 50 个 findAndModify、20 个 INSERT 和 10 个 GET 查询
  7. 一些 INSERT 包含大约 1MB 的大型文档
  8. 数据库中有2600个集合
  9. 一些集合将用于存储大型文档 - 大小在 10kb 到 600kb 之间 - 在极少数情况下会更高
  10. 索引可用于两个字符串键
  11. CPU 使用率约为 6%,RAM 几乎可用。总内存 16GB,已用 4GB

现在我们遇到了一些问题,尤其是在 I/O 速度方面。插入性能令人满意,但更新和查询性能较差。将对包含 3M 文档的集合进行一些查询,这解释了为什么它很差。

所以我们正在寻找解决方法。您有什么建议,请告诉我们什么是更高效的架构。请考虑您的建议中的预算。我们都知道 10 个独立的 SSD 服务器将是一个很好的解决方案。 我们目前的选择是:

  1. 添加第二个 SSD HDD
  2. 添加集群linux数据库专用服务器-旋转磁盘HDD
  3. 分片数据库 VPS
  4. 让我们知道其他选项

任何建议,我们的错误提醒和提示都会很棒。

========================

回答?

正在编制索引!索引错误是关键问题。我们修改了所有索引键,一切都解决了。现在 RAM 使用 100%,性能非常好。我们听到了索引,我们说没问题!但是,需要多加注意。

我从未在 Windows 上使用过 MongoDB,但我会更改两件事:

  • MongoDB 喜欢 SSD。将您的数据移动到一个
  • 考虑将网络和 MongoDB 拆分到两个服务器

在 Linux 系统上只使用 4GB RAM 会很奇怪,但我不知道 Windows。

我不认为分片是个好主意,而且对于同一个数据库中的 2600 个集合,这会有点复杂。如果您要 运行 阅读它,副本集可能是一个解决方案。

另一种选择是将 2600 个集合拆分到多个数据库中,以便为每个数据库获取写锁。