MongoDB计算性能权衡

时间:2012-01-13 14:45:01

标签: performance mongodb

我有一个必须存储大量稀疏数据的应用程序 所有文件分为项目 每个项目都有自己的数据库,有自己的集合和文档,但都在同一台服务器上 现在我希望跨项目查询和引用更容易。

所以我正在考虑将所有数据移动到1个数据库中,让每个文档都有一个我可以查询的“项目”字段。
数据库模式将来自:

Project1 (Database)
    Task (Collection)
        {name: my_task, status: Completed, ...}

Project2 (Database)
    Task (Collection)
        {name: other_task, status: Started, ...}

类似于:

SingleDatabase
    Task (Collection)
        {name: my_task, status: Completed, project: Project1, ...}
        {name: other_task, status: Started, project: Project2, ...}

我的猜测是它会对内存,磁盘使用率和写入性能进行一些性能折衷 问题在于我根本不知道它会产生多大的影响,如果它值得做的话。

问题是:
是否可以计算出此决定对服务器的影响?
类似的东西:给定X集合,X文档,X索引......服务器平均有:X / s写入速度慢,需要X更多内存..等等。

1 个答案:

答案 0 :(得分:2)

这是一个高度理论性的问题,“理论在绩效方面是一个不好的伴侣”。即使有一个一致的,完善的理论,它也会非常复杂,因为你必须考虑缓存(即操作有历史,没有时间可逆,需要非常详细的使用模式等。 ),许多非线性效应(大多数算法旨在实现一些日志( n )或 n 日志( n )行为)和不连续性'性能函数'(如果你的RAM不能再保存索引,交换开始),硬件特性(在SSD上交换比在主轴上更快)等等。

了解其行为的最快,最可靠的方法是实现它。这种实现方式可能是片状,黑客和其他方式。但是你可以在几个小时内获得良好的性能指示。

一些理论输入:

从本质上讲,使用多个数据库就像一个存储桶排序:您有一些代码可以快速识别要查询的存储桶。在这些存储桶中,索引要小一些,因此速度要快一些。另一方面,搜索时间应该随着索引大小的增加而仅增加对数。特别是对于大型馆藏,这意味着几乎没有区别。

磁盘空间将更有效地使用(除非您大量调整数据库设置),因为MongoDB将为每个数据库分配一个16MB大小的.ns文件和至少64MB的数据文件,即使您只存储一些文件。因此,如果小型数据库的数量很大,那么迁移后的磁盘占用空间应该会更好,尽管有额外的字段。

RAM占用空间的变化应该可以忽略不计,但是内存是如此错综复杂的话题,我不打赌一分钱。