【问题标题】:Does the order of fields in mongodb affect the query time (collscan)?mongodb中的字段顺序是否影响查询时间(collscan)?
【发布时间】:2021-10-20 17:01:32
【问题描述】:

我观察到当我在字段名称中有一些拼写错误时,mongodb 查询的运行时间要长得多。 所以我的问题是:

  1. mongo 中的文档如何存储在内存中(读取后) - 作为哈希表或链表?
  2. 当查询只需要第一个字段时,是否可能没有完整读取文档(从头到尾)?例如 col.find({some_field: "asdf"}, {some_field: 1}) 只能从 bson 文件中读取这一字段并跳过读取其余字段(以防文档非常大)。如果是这样,那么字段名称中的拼写错误会强制 mongo 读取整个 bson 并增加 collscan 的时间。

我知道在这种情况下索引会发生很大变化,所以我们假设集合中没有任何索引。

【问题讨论】:

    标签: mongodb bson


    【解决方案1】:

    第二季度:

    MongoDB 内部使用的 BSON 解析器具有选择性 解析。事实上,说它是一个迭代器会更正确 通过 BSON 字段而不是 BSON 对象的解析器。重要的之一 BSON 设计的一部分是因为每个字段都是 固定大小或以大小为前缀,很容易跳过大片 查找字段时的 BSON(例如,字符串和整个子对象)。这个 与 json 不同,您总是需要检查每个字节 [1] 直到 你找到你想要的领域。如果你好奇,你可以看到逻辑 用于计算字段大小 https://github.com/mongodb/mongo/blob/f27f82560f129f6ccd9b16fba887949ab197e678/src/mongo/bson/bsonelement.cpp#L709-L776, 这是遍历字段的核心。

    https://groups.google.com/g/bson/c/5u1WQ5kAtkc

    【讨论】:

      猜你喜欢
      • 2020-11-24
      • 1970-01-01
      • 1970-01-01
      • 2020-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多