MongoDB 2.5版本將提供新的查詢引擎
MongoDB 2.5.0 (開發(fā)版本)中,包含了一個新的查詢引擎實現(xiàn)。查詢引擎主要的工作是通過查詢條件,查詢到匹配的數(shù)據。當然,這其中包括對索引的使用?,F(xiàn)有的查詢引擎在MongoDB發(fā)布的4年以來基本沒有進行什么變更。它***的問題是缺乏擴展性,也沒有查詢優(yōu)化的功能(我們知道,MongoDB的查詢優(yōu)化實際上是通過試錯的方式來做的)。
在2.5.0版本中,查詢引擎被完全重寫,它包括三個獨立的部分:
- 一個語法樹(AST:abstract syntax tree)模塊,用于解析查詢語句
- 一個解析模塊,將BSON的查詢條件解析成AST
- 一個完全重寫的查詢API層,其功能和現(xiàn)有的查詢模塊類似
本次改動主要是為后續(xù)的查詢優(yōu)化工作鋪路,其中很重要的一個功能點,就是索引交集的實現(xiàn)。比如你的查詢條件是 {a:5, b:6} ,而這時候你分別有a和b兩個字段的獨立索引。在現(xiàn)在的查詢引擎下,MongoDB只能使用其中一個索引。比如找出所有a的值為5的記錄,再逐條遍歷,查詢出b為6的值。(或者反過來查b的索引,再遍歷出a為5的值)。索引交集功能則可以在現(xiàn)有的情況下,通過對a,b兩個獨立的索引求交集,直接獲取到a=5,b=6的記錄(目前的穩(wěn)定版中,需要建一個聯(lián)合索引才能實現(xiàn))。除了普通索引外,這一功能還會擴展到地理位置索引,全文索引上。(比如獲取所有在3.5公里以內,符合xxx條件的人)
另外利用新的查詢引擎,還可以實現(xiàn)一些更高級的查詢,比如查詢出 a == b + c 的記錄。以后你可以這樣寫:{ a : { $sum: [ “$b” , “$c” ] } })。這樣的功能對新的查詢引擎來說很容易實現(xiàn)。
新的查詢引擎目前已經重寫完成并且可以測試了。如果你有興趣測試測試,可以下載***的2.5.0版本試玩。【下載】
相關代碼都在github上面: