想問一下圖資料庫neo4j和spark下面的graphx有什麼區別?學習那個適合用來進行機器學習,數據挖掘?

如題


neo4j偏向圖存儲,相當於oltp,graphx是圖計算引擎,偏分析,當然,他是藉助分散式大數據平台spark存儲數據的


neo4j就是一個bi庫


首先來說neo4j

neo4j是native graph database,也就是有自己的資料庫存儲。它的長處在於支持互動式查詢,屬於oltp系統,很多人說不支持分片存儲使其無法應付海量數據,本人覺得恰恰相反,可以說neo4j的存儲方式是教科書式的以空間換時間,每台伺服器配備ssd磁碟陣列雖然貴,但是可以大幅減少分片存儲的帶寬佔用和通信時間開銷,保證oltp的效率。

neo4j很容易上手,特有的cypher查詢語言以畫草圖的方式查詢和建模數據,很直觀。適當構建查詢計劃的情況下,neo4j的查詢效率很高,能夠迅速從整網中找出符合特定模式的子網,供隨後分析之用。以下給出一個示例圖:

此外,neo4j實現了tinkerpop介面,tinkerpop是剛剛畢業的一個阿帕奇項目,有望建立圖資料庫的一套標準用戶介面。同樣實現tinkerpop的還有titan,orient等主流圖資料庫。

再來看graphX

graphX是spark的系統組件,存儲是基於spark rdd的,有節點和邊兩種rdd。熟悉spark的朋友對rdd該不會陌生,spark通過緩存rdd的操作節省了大量計算和io開支,因此spark特別適合對海量數據進行運算,此理同樣適用於graphX。因此,graphX自設計之初就是奔著圖計算的目標去的,屬於olap系統,而非oltp系統。

graphX有豐富的函數庫,能完成很多經典圖演算法,如pagerank、三角計數、社群發現、最短路徑計算等等。此外,圖存儲和計算的方式不禁讓人想到神經網路演算法,如果將隱層用節點rdd表示,隱層之間的邊用邊rdd表示,運用graphX的計算優勢搭建起一套多層神經網路的想法很美妙,這應該就是MLlab相應演算法模塊的工作原理。

因此跟graphx相關的概念集中在圖計算,而非圖存儲和查詢領域。所以經常瀏覽db-engines的朋友們不難發現,圖資料庫列表裡就沒有graphx這一項。在比較圖存儲和圖查詢性能時,比較集合多是neo4j、orientdb、titan、arangodb等圖資料庫系統。而比較圖計算時,比較集合多是graphlab、giraph、graphX。

簡言之,圖資料庫系統和圖計算系統不是一回事:前者是為了存儲完整數據,並根據需求從中查詢數據子集供分析展示之用;後者的任務是拿到一個圖結構的數據集,從中計算一些有用的東西。

如果你有隨時增長的海量數據,希望以圖的方式存儲這些數據,從而能在需要時順利挖出一個子圖來,那就要藉助於圖資料庫,此時如果你有充足的資金,neo4j是不二之選,否則就要從db-engines裡面第二名以後的一眾資料庫里挑選。進一步,如果你的需求不只停留在查詢,還要依據查詢結果計算出一些圖的特徵來,那麼建議你將圖資料庫系統同圖計算系統聯合使用。如下鏈接可以提供相關案例https://neo4j.com/developer/apache-spark/

有關oltp和olap的比較,以及圖資料庫系統和圖計算系統的比較問題,建議參考"spark graphx in action"一書中的第一部分。


spark 吧,spark這個大集體里不僅僅有 graphx 還有 streaming、ml 支持。neo4j 應該只是一個圖資料庫吧?


Neo4j叫做圖資料庫,所以他是資料庫,就是增刪改查, OLTP。

Spark GraphX 是圖計算,是做graph-parallel computation,所以他是可以做分析計算的,是OLAP。

在Learning Neo4j的書上明確的說 "While graph databases are

extremely powerful at answering "graph local" questions, there is an entire category

of graph tools (often referred to as graph processing engines or graph compute

engines) that look at the graph global problems."


neo的cypher查詢語言已經成為事實上的標準,spark的機器學習pipeline是一站式的,各有所長,感覺spark未來也會支持cypher


推薦閱讀:

內存資料庫 (in-memory database) 的發展現狀和前景如何?
資料庫如何做到多個任意欄位的檢索?(nosql方向)
哪裡有學習sql或者oracle資料庫的視頻教程?
為什麼沒有人實現 P2P 資料庫?
每天數據最少產生960W條記錄,我選Mysql還是Hbase?

TAG:資料庫 | 機器學習 | 關係挖掘 | Neo4j |