gpt4 book ai didi

mongodb - 为什么在 MongoDB 中完全扫描一个表需要更长的时间?

转载 作者:可可西里 更新时间:2023-11-01 09:23:34 25 4
gpt4 key购买 nike

我用 1000 万行数据进行了测试。每行有 3 个整数和 2 个字符串列。首先,我将此数据导入到作为单个分片的 mongoDB。我在非索引列上使用 db.table.find() 执行简单的“where”查询。查询获取一行大约需要 7 秒。

在相同的硬件上,我将相同的数据加载到内存中的 C# 列表中。我做了一个 while 循环来扫描所有 10M 数据,并做了一个简单的相等控制来模拟 where 查询。它只需要大约 650 毫秒,比 MongoDB 快得多。

我有一台 32 GB 的机器,所以 mongodb 可以毫无问题地内存映射表。

为什么 mongoDB 慢得多?是因为 mongoDB 将数据保存在难以完全扫描的数据结构中,还是因为内存映射与将数据保存在变量中不同。

最佳答案

正如 Remon 所指出的,您在这个测试中肯定是在比较苹果和橙子。

要了解更多关于表扫描幕后发生的事情,请通读 MongoDB 内部 here . (在Storage模型下看)

enter image description here存在表示连续磁盘​​空间的范围的概念。

每个范围都指向一个链接的文档列表。

文档包含 BSON 格式的数据。所以现在您可以想象我们将如何检索数据。

现在右上角恰如其分地展示了拥有索引的美妙之处。 MongoDB 使用 BTree 结构进行导航,速度非常快。

尝试更改您的测试以进行一些热身运行并使用索引。

更新:作为我日常工作的一部分,我做了一些测试来比较 JBoss Cache(内存中的 Java 缓存)和 MongoDB 作为应用程序缓存(针对 _id 的查询)的性能。结果相当可比。

关于mongodb - 为什么在 MongoDB 中完全扫描一个表需要更长的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12036970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com