ArangoDB、MongoDB和Neo4j性能比較
Claudius Weinberger是 ArangoDB 的首席執行官。在他看來,原生多模型數據庫是指數據庫引擎兼有文檔、圖和鍵/值數據模型,提供了涵蓋三種模型的統一查詢語言和API,并允許在單個查詢中混合使用三種模型。他認為,多模型數據庫可以與文檔存儲及圖數據庫(比如, MongoDB 、 Neo4j )一較高下。為了支持這個觀點,其團隊對ArangoDB、MongoDB和Neo4j進行了性能測試。近日,他發表了一篇 博文 ,介紹測試過程和結果。
測試所用的數據集是一個社交網絡快照,由斯坦福大學的 SNAP 提供,其中包含160多萬個頂點(代表個人資料)和3000多萬條邊(代表朋友關系)。他們用頂點數據做文檔數據庫測試,用頂點和邊的綜合數據做圖數據庫測試。測試場景如下:
- 單次讀:單文檔(個人資料)讀取(10萬次);
- 單次寫:單文檔寫入(10萬次);
- 聚合:計算社交網絡的年齡分布,即每個年齡出現多少次;
- 相鄰頂點:為500個頂點查找直接相鄰頂點以及相鄰頂點的相鄰頂點;
- 最短路徑:在一個高度連通的社交圖中查找19條最短路徑。
其中,所有數據庫都執行相同的操作,所有測試用例都是用JavaScript實現,在node.js中運行。
測試結果以ArangoDB的吞吐量指標為基準,百分比越小表明吞吐量越高,相反,百分比越高表明吞吐量越低:
可以看出,測試結果支持Weinberger的觀點。MongoDB的單文檔讀/寫更快,但ArangoDB的聚合和查找相鄰頂點效率更高。由于 在MongoDB中測試最短路徑查詢需要完全在客戶端實現,所以他們沒有對MongoDB做這項測試。令Weinberger吃驚的是,Neo4j并沒有 在查找相鄰頂點的測試中勝出。
在Hacker News上,部分網友對測試的客觀性提出了 質疑 。網友harunurhan提出:
你們確定對Neo4j或MongoDB進行了與ArangoDB同等程度的調優?而且,我不喜歡一家公司發表自家產品與其它產品的評測文章。雖然,許多文章信息豐富且客觀,但我一律將它們視為市場營銷/廣告文章。
對此,網友neunhoef(來自ArangoDB的Max)答復說:
我們已經花費了相當大的精力來對每一種數據庫進行調優。但顯然,與其它數據庫相比,我們更了解自己的產品。不過,我們已經號召更了解其它產品的人(參與進來),調查將一直開放,任何人都可以做出貢獻及提出改進建議。
網友bhouston則表示:
我認為,要做到客觀,唯一的方式是提供一項測試,然后給每個DB提供商機會,讓他們調整數據庫和查詢,以便優化性能。
對此,網友porker提醒道:
據我所知,測試是開源的,原始結果也在那里,也歡迎貢獻。
感興趣的讀者可以訪問該測試的 GitHub頁面 ,或者參與 HN的討論 。