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

时间:2015-02-04 14:57:18

标签: mongodb database-design database

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

  1. 560GB是MongoDb的/ data /文件夹的总大小(所以纯数据大小要低得多)
  2. 数据库服务器和Web服务器托管在单个专用服务器上
  3. 没有SSD
  4. 操作系统是Windows Server 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总RAM和4GB
  12. 现在我们遇到了一些问题,尤其是I / O速度问题。插入性能令人满意,但更新和查询性能很差。一些查询将在3M文件的集合上进行,这解释了为什么它很差。

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

    1. 添加第二个SSD HDD
    2. 为数据库添加集群linux专用服务器 - 旋转磁盘HDD
    3. 使用VPS对数据库进行分片
    4. 让我们知道其他选择
    5. 任何建议,我们的错误提醒和提示都会很棒。

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

      回答吗

      索引!索引中的错误是关键问题。我们修改了所有索引键并解决了所有问题。现在RAM使用率为100%,性能非常出色。我们听到了索引,我们说它没问题!但是,需要更多关注。

1 个答案:

答案 0 :(得分:1)

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

  • MongoDB喜欢SSD。将数据移至一个
  • 考虑将web和MongoDB拆分为两个服务器

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

我认为分片不是一个好主意,并且在同一个数据库中使用2600个集合会有点复杂。如果你要对它进行读取,副本集可能是一个解决方案。

另一种选择是将2600个集合拆分为多个数据库,以获得每个数据库的写锁定。