mongodb – NoSQL:索引和基于关键字的搜索

我有一个存储项目的应用程序(例如Web文档).每个项目都可以包含任意大量的标签.典型的常见查询是使用给定的标记集检索所有文档.嗯,一个非常常见的Web应用程序.

现在我正在考虑将NoSQL数据库作为持久存储.各种NoSQL系统(例如MongoDB)支持二级索引和基于关键字的搜索.显示如何在不同系统中执行此操作的示例很容易找到.问题是,我想知道“引擎盖下”发生了什么,即二级索引存储的方式/位置,以及如何实际执行带有标签列表的查询.特别是在具有许多节点的系统中

我知道基于Map / Reduce或类似的解决方案.但在这里,我对索引的工作原理感兴趣.例如,我遇到的问题是:

>二级索引是否仅存储项目/对象ID或更多?
>如果查询包含k个标记,则执行k个子查询(每个标记一个),并将k个部分结果合并为一个启动节点?

哪里可以找到不同NoSQL系统的此类信息?非常感谢任何提示.

基督教

最佳答案 在MongoDB中,标签的索引将通过利用多键功能来完成,由此数据库尝试将文档与数组的每个元素进行匹配.您将索引给定文档的此tags属性,该属性将创建由该数组中的标记范围构造的btree.

您可以通过观看此演示文稿了解有关多键here的更多信息,并可以获取有关MongoDB中索引的更多信息:MongoDB Internals

辅助索引是否仅存储项目/对象ID或更多?

索引由索引字段组成(假设它是您的情况下的标签数组,然后字段将是单个标记)和用于在内存中有效定位文档的偏移量.如here所述,它还具有一些填充其他开销

如果查询包含k个标签,则执行k个子查询(每个标签一个),并将k个部分结果合并为一个启动节点?

这取决于,但是,例如,如果查询使用$或在标记字段上,我认为查询是并行执行的,每个都在O(log n)时间内,结果组合形成结果集但是我虽然不太确定.

点赞