我已经用 10 M 行数据进行了测试。每行有 3 个整数列和 2 个字符串列。首先,我将这些数据导入到单个分片的 mongoDB。我在非索引列上使用 db.table.find() 进行了简单的“where”查询。该查询获取大约需要 7 秒的单行。
在同一硬件上,我将相同的数据加载到内存中的 ac# 列表中。我做了一个 while 循环来扫描所有 10M 数据并做一个简单的相等控制来模拟 where 查询。它只需要大约 650 毫秒,比 MongoDB 快得多。
我有一台 32 GB 的机器,所以 mongodb 对表进行内存映射没有问题。
为什么 mongoDB 慢得多?是因为 mongoDB 将数据保存在难以完全扫描的数据结构中,还是因为内存映射与将数据保存在变量中不同。