在 mongoDB 中搜索索引数据的复杂度(Big-O)是多少?
Posted
技术标签:
【中文标题】在 mongoDB 中搜索索引数据的复杂度(Big-O)是多少?【英文标题】:What is the complexity (Big-O) of searching an indexed data in mongoDB? 【发布时间】:2012-08-02 11:52:56 【问题描述】:这是针对设计问题。你能告诉我我是否正在索引如下所示的关键词。
obj =
name: "Apollo",
text: "Some text about Apollo moon landings",
tags: [ "moon", "apollo", "spaceflight" ]
确保这样的索引。
db.articles.ensureIndex( tags: 1 );
和频繁查询如下。
db.articles.findOne( tags: "apollo" ).name
如果我插入了 n 个此类文档,请给我此类查询的性能。
是 O(1) 吗?
在此类数据上搜索正则表达式的性能如何?
【问题讨论】:
【参考方案1】:这是一个 B-tree 索引,与几乎所有数据库一样,因此它的查找时间为 O(log n)。
正则表达式搜索听起来像是需要进行全表扫描或全索引扫描,两者都是 O(n)。如果表达式是前缀锚定的,它只需要扫描一个范围,但我想这仍然算作 O(n)。
【讨论】:
在 nosql 中是否可以接受 big o of n?严肃的问题。我是新来的开发人员。 取决于 N 有多大以及您需要它返回多快。它当然不能很好地扩展到大型集合。【参考方案2】:正如 Thilo 所提到的,MongoDB 索引是作为“B-Tree”索引实现的,从根本上说,MongoDB 中的索引在操作上类似于其他数据库系统中的索引。在 MongoDB here 中有一个很好的索引概述。
我建议您阅读有关 indexing strategies 和 indexing operations 的信息,以帮助您进行实施、管理和设计。
为了帮助分析查询的性能并查看它们在做什么,您可以将 explain() 运算符附加到查询中。有关explain()
以及如何解释其输出的更多信息,请参阅here。
MongoDB 将PCRE 用于正则表达式。用法记录在here。除了 PCRE 库中的限制之外,没有大小限制。与所有正则表达式一样,请记住构造不良的正则表达式的后果:)
【讨论】:
以上是关于在 mongoDB 中搜索索引数据的复杂度(Big-O)是多少?的主要内容,如果未能解决你的问题,请参考以下文章
面试问题 - 在排序数组 X 中搜索索引 i 使得 X[i] = i