主页 > 知识库 > 数据库 > NoSQL >

MongoDB 2.5版本将提供新的查询引擎

来源: 作者: 发表于:2013-06-03 09:10  点击:
MongoDB 2.5.0 (开发版本)中,包含了一个 新的查询引擎实现 。 查询引擎 主要的工作是通过查询条件,查询到匹配的数据。当然,这其中包括对索引的使用。现有的查询引擎在MongoDB发布的4年以来基本没有进行什么变更。它最大的问题是缺乏扩展性,也没有查询优

MongoDB 2.5.0 (开发版本)中,包含了一个新的查询引擎实现查询引擎主要的工作是通过查询条件,查询到匹配的数据。当然,这其中包括对索引的使用。现有的查询引擎在MongoDB发布的4年以来基本没有进行什么变更。它最大的问题是缺乏扩展性,也没有查询优化的功能(我们知道,MongoDB的查询优化实际上是通过试错的方式来做的)。

在2.5.0版本中,查询引擎被完全重写,它包括三个独立的部分:

  • 一个语法树(AST:abstract syntax tree)模块,用于解析查询语句
  • 一个解析模块,将BSON的查询条件解析成AST
  • 一个完全重写的查询API层,其功能和现有的查询模块类似

本次改动主要是为后续的查询优化工作铺路,其中很重要的一个功能点,就是索引交集的实现。比如你的查询条件是 {a:5, b:6} ,而这时候你分别有a和b两个字段的独立索引。在现在的查询引擎下,MongoDB只能使用其中一个索引。比如找出所有a的值为5的记录,再逐条遍历,查询出b为6的值。(或者反过来查b的索引,再遍历出a为5的值)。索引交集功能则可以在现有的情况下,通过对a,b两个独立的索引求交集,直接获取到a=5,b=6的记录(目前的稳定版中,需要建一个联合索引才能实现)。除了普通索引外,这一功能还会扩展到地理位置索引,全文索引上。(比如获取所有在3.5公里以内,符合xxx条件的人)

另外利用新的查询引擎,还可以实现一些更高级的查询,比如查询出 a == b + c 的记录。以后你可以这样写:{ a: { $sum: [ “$b” , “$c” ] } })。这样的功能对新的查询引擎来说很容易实现。

新的查询引擎目前已经重写完成并且可以测试了。如果你有兴趣测试测试,可以下载最新的2.5.0版本试玩。【下载】

相关代码都在github上面:

来源:blog.mongodb.org

    有帮助
    (0)
    0%
    没帮助
    (0)
    0%
  • 上一篇:2013年中国数据库大会PPT
  • 下一篇:没有了