ArangoDB,MongoDB,Neo4j 和 OrientDB 性能比較
我近期發的博客“本地多模型的競爭”在 HN 和其他頻道上引發了人們強烈的興趣。就如預期的那樣,社區里立刻建議改進公布的代碼庫,并且我也已經公布了幾次更新(這里要特別感謝 Hans-Peter Grahsl,Aseem Kishore,Chris Vest 和 Michael Hunger)。
下面是最新的特性圖表:
此次試驗旨在表明多模型能成功地與那些在自己的地盤只關注性能與內存消耗的特殊玩家競爭。因此,不少讀者對是否該包括 OrientDB 或者其他著名的本地多模型數據庫有疑問也就不讓人驚訝了。
我們想要讓多模型變得更加強大,所以我的同事和我立刻開始給了 OrientDB 一個 Spin。有個官方支持的 node.js 驅動 Oriento 通過使用快速二進制協議和 OrientDB,很容易地就提供給我們用于比較手頭上 SQL 方言所需一切 。
但是,結果卻不如我們預期的那樣好。很明顯,我在使用 OrientDB 的方式上出了點錯誤。所以我請求 OrientDB 的用戶幫我檢查,不過他們也沒能立即指出問題所在。所以,我很希望看到有人能提出一些建議,并且會盡快公布更新的結果。
結果
廢話不多說,直接上結果,這次包括了 OrientDB,同時還有給出的很多建議
很明顯,肯定有些事出錯了。所以只要有人能提出改善的建議,我都無比感謝。討論請上 HN。
我們使用 OrientDB 的細節
對 于 OrientDB,我們把配置文件導入一個類中而關系在另一個類中,但是它們也作為一個直接鏈接儲存在 Profile 類的對象節點中(“自由指數鄰接”)。所有的查詢均作為 SQL 查詢發送到數據庫中。Oriento 驅動使用的是通常 node.js 風格的承諾(promises)。單文件查詢和聚合都原生于 SQL,因此這十分簡單明了。對于相鄰的查詢,我們使用直接鏈接的 OrientDB 圖形擴展。二級相鄰的特殊效果對我們來講是個挑戰,但是在外部的幫助下,我們設法找到了一個行之有效的 SQL 查詢。在 SQL 的函數調用中,ShortestPath 也直接支持。
Oriento 目前只支持一個到數據庫的連接。為了不使需求沖突,我們使用了 25 個驅動實例 —— 讓 25 個平行線路連接到服務器。這種改進讓性能增色不少。
對于某些原因的猜測
正 如之前說的,我們不知道這到底是什么情況。我們簡單地看了下代碼(開源版本)。跟 ArangoDB 和 Neo4j 相反,似乎 OrientDB 采用了 Dijkstra 的算法來實現 ShortestPath。這實際上解釋了在最短路徑測試上的糟糕表現,我們的社會圖是高度連接的,并且顯示了鄰近極點距離的指數增長。
我只能在這里重復,任何有關如何改善這種狀況的建議我們都是歡迎的,并且當有新發現的時候我們會立即更新。
我們會執行和以前完全相同的測試,請閱讀這里所有的描述。
資源和貢獻
本次測試所有的代碼都可以從我的 Github 庫上下載,所有的數據也已經在 Amazon S3 bucket 上公開發布。Tar 文件中包含了數據庫文件和源文件。
-
https://s3.amazonaws.com/nosql-sample-data/arangodb-2.6.tar.bz2
-
https://s3.amazonaws.com/nosql-sample-data/mongodb-3.0.3.tar.bz2
-
https://s3.amazonaws.com/nosql-sample-data/neo4j-community-2.2.2.tar.bz2
-
https://s3.amazonaws.com/nosql-sample-data/orientdb-community-2.0.9.tar.bz2
我們歡迎任何人測試其他數據庫并分享他的結果。
Source:ArangoDB