MongoDB 2.5 版本將提供新的查詢引擎

jopen 11年前發布 | 18K 次閱讀 MongoDB

MongoDB是一個介于關系數據庫和非關系數據庫之間的產品,是非關系數據庫當中功能最豐富,最像關系數據庫的。他支持的數據結構非常松散,是類似json的bjson格式,因此可以存儲比較復雜的數據類型。Mongo最大的特點是他支持的查詢語言非常強大,其語法有點類似于面向對象的查詢語言,幾乎可以實現類似關系數據庫單表查詢的絕大部分功能,而且還支持對數據建立索引。

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/NoSQLFan

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!