基于文档大小的MongoDB性能

时间:2010-10-18 23:45:08

标签: c# performance mongodb

我一直在玩samus mongodb driver,特别是基准测试。从输出中可以看出,文档的大小会对这些集合的操作所花费的时间产生巨大影响。

alt text

是否有一些文档可以推荐要争取的余额,或者更多的“真实”数字围绕什么文档大小来查询时间?这种糟糕的性能是否是驱动程序和任何序列化开销的结果?有没有人注意到这个?

3 个答案:

答案 0 :(得分:2)

我现在找不到链接,但数据库的格式是这样的,无论文档是大还是小,都无关紧要。对于通过索引进行访问,当然没有区别,对于表扫描,由于BSON格式,可以快速跳过不感兴趣的文档(或文档中不感兴趣的部分)。如有,the overhead of the BSON format affects tiny documents more than large ones

所以我认为你看到的性能下降很大程度上是由于加载这些文件的序列化成本(当然,将大型文档写入磁盘需要花费更多时间而不是小文档,但它应该大致相同对于相同聚合大小的多个小文档。)

在您的基准测试中,您是否可以将数据标准化为基于相同数据量(以字节为单位,而不是文档计数)?

答案 1 :(得分:2)

您可以使用db.setProfilingLevel(2)打开profiling并查询db.system.profile以获取有关已执行查询的详细信息。

虽然这可能会稍微扭曲测试结果,但它可以让您深入了解服务器上的查询时间,从而消除驱动程序或网络对结果可能产生的任何影响。如果这些查询时间显示与测试相同的模式,则文档大小确实会影响查询时间。如果无论文档大小如何,查询时间大致相同,那么它就是您正在查看的序列化开销。

答案 2 :(得分:2)

但这是一个很好的基准吗?不要这么认为。阅读Mongodb performance on Windows

我认为应该创建索引时发生的异常仍然被吞噬。 FindOne()medium返回363有和没有索引的“创建”。