【问题标题】:MongoDB performance on finding documents with key in a range of valuesMongoDB 在查找具有一系列值的键的文档时的性能
【发布时间】:2016-11-29 07:27:20
【问题描述】:

假设数据库“testdb”有集合“testcollection”。在这个集合中,有一个关键的“testfield”。 此集合包含数十亿份文档

即使是数十亿个文档,也可以非常快速地找到键“testfield”的确切值,因为索引是基于基数树的(可能?)。

model.find({
  testfield: "some-value"
})

但是,当在一系列值中查找时,它仍然对这数十亿个文档快速吗?

model.find({
  testfield:{
    $gte: "some-lower-value",
    $lte: "some-upper-value"
  }
})

【问题讨论】:

  • 一切都取决于确切的键索引排序。这又取决于构建数据库时的设置和配置(事后也可以更改)。如果它是testfield 值的排序列表,那么它应该相对较快[假设上限和下限相对接近,显然如果您的范围很广,那么数据库的很大一部分会按照您的方式发送,这可能需要一段时间]

标签: c++ mongodb performance nosql


【解决方案1】:

Mats Peterson 在问题下方的评论中:

一切都取决于确切的键索引排序。这又取决于 构建数据库时的设置和配置(可以 事后也改变了)。如果它是测试字段的排序列表 值,那么它应该比较快[假设上下 限制相对接近,显然如果你有一个广泛的范围,a db 的大部分内容会按照您的方式发送,这可能需要一些时间]

查找范围的时间也很快,但基于值的范围。

下限值和上限值可以立即在 ~log(N) 中找到,就像找到精确值一样。由于 index 应该是键的排序值列表,因此输出时间取决于循环将所有条目从低值提取到高值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-03
    • 1970-01-01
    • 2012-10-27
    相关资源
    最近更新 更多