我用10 M行数据进行了测试.每行有3个整数和2个字符串列.首先,我将此数据导入mongoDB,这是一个单独的分片.我在非索引列上使用db.table.find()进行简单的"where"查询.查询获取单行,大约需要7秒.
在相同的硬件上,我将相同的数据加载到内存中的ac#list.我做了一个while循环来扫描所有10M数据并做一个简单的相等控制来模拟查询的位置.它只需要大约650毫秒,比MongoDB快得多.
我有一个32 GB的机器,所以mongodb没有问题的内存映射表.
为什么mongoDB要慢得多?是因为mongoDB将数据保存在难以完全扫描的数据结构中,还是因为内存映射与将数据保存在变量中的方式不同.
正如Remon指出的那样,你肯定在这个测试中将苹果与橙子进行比较.
要更深入地了解该表扫描中幕后发生的事情,请在此处阅读MongoDB内部.(在存储模型下查看)
扩展区的概念代表连续的磁盘空间.
每个范围都指向一个链接的文档列表.
doc包含BSON格式的数据.所以现在你可以想象我们将如何检索数据.
现在,在右上角恰如其分地显示了索引的美感.MongoDB使用BTree结构进行导航,速度非常快.
尝试更改测试以进行一些预热运行并使用索引.
更新:作为我日常工作的一部分,我做了一些测试,将JBoss Cache(内存中的Java Cache)和MongoDB的性能作为应用程序缓存(针对_id的查询)进行比较.结果非常可比.