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

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

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

责任编辑:honglu 来源: NoSQLFan
相关推荐

2009-07-08 16:45:07

Servlet 2.5

2009-07-16 16:53:29

Jython 2.5

2009-07-07 02:15:03

Servlet2.5

2012-09-28 09:58:35

Outlook 201Office 2013

2010-01-05 14:35:48

Ubuntu 9.10

2015-07-17 13:27:16

MySQL 5.7

2015-07-17 13:45:12

MySQL 5.7

2009-12-18 13:43:07

Ruby 1.9版本

2015-07-17 13:43:09

MySQL 5.7

2009-12-28 10:16:48

Groovy 1.7

2015-07-17 13:59:33

MySQL 5.7

2009-02-25 08:38:01

Windows 7上网本

2012-09-07 14:18:15

MongoDB 2.2

2012-11-16 09:50:32

Windbg

2022-06-27 06:02:27

geopandas开发Python

2023-10-09 08:33:50

过滤和排序分布式搜索

2012-08-01 13:30:30

微软Office 2013

2012-05-07 23:45:54

FantomJavaJVM

2010-06-08 09:45:27

openSUSE 11

2016-01-21 11:05:52

ES6JavaScript新特性
点赞
收藏

51CTO技术栈公众号