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上面:
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
作者
相关推荐
-
NoSQL性能管理仍不完备 你该如何应对?
NoSQL技术现在仍然处于相对初级的阶段,众多NoSQL软件类型和产品服务令人眼花缭乱,选择合适的性能管理方案也成为一件颇具挑战性的事。
-
NoSQL——未来数据库家族的一员
NoSQL是对数据库由内而外的全方位改造,从而创造出一个高容量、高速度和高可变性的架构。然而,NoSQL供应商在可变性部分却正在遭遇失败。
-
GPU技术仅局限于游戏领域?当心大数据应用的小船说翻就翻
GPU技术的使用是一些机器学习应用的前沿和核心。Facebook,百度、亚马逊和其他一些公司正在使用的GPU集群来研究深层神经网络相关的机器学习应用程序。
-
【NoSQL数据库四大类型解析】如何选择列族数据库和图形数据库?
NoSQL数据库有多少类型?如何选择合适的NoSQL数据库?我们将介绍选择列族数据库和图型数据库必须考虑的因素。