2013-07-17 57 views
2

我的應用程序數據包含一個巨大的樹,隨着用戶與系統交互而增長。圖形數據庫比key-val商店更適合存儲大樹嗎?可擴展性的損失(對於圖形dbs通常更難分割)由其他功能補償?圖形數據庫是否比keyval存儲更適合存儲樹?

+0

我很驚訝,沒有人提到文件的數據庫,如蒙戈DB。或者,也許這只是一種鍵值存儲?根據我的經驗,文檔數據庫不是存儲樹的答案,因爲如果不將整個文檔樹讀入內存,就無法訪​​問內部節點。我希望有一天有人想出一個NoSQL樹數據庫。 –

回答

4

這要看情況。

如果你使用一個關鍵值存儲,我會想象你會爲孩子做很多查找,這可能是一個很長的列表,所以你的關鍵應該是父節點,並且你的價值是孩子,你可能會有很多動作和查詢桌子。這通常是您在關係數據庫中存在的問題,即這些類型的表連接。

圖形數據庫是偉大的,因爲你不做連接,但遍歷,所以你會開始在根,並指定深度,或結束條件,然後你可以讓圖遍歷使用傳出關係,讓你你的最終結果。

我同意你的看法分片不是圖形數據庫一個不錯的選擇,至少不能跨店關係遍歷的感覺。但我相信,對數據進行適當的建模,這應該不成問題,至少在圖數據庫很聰明的情況下不會有問題。

的Neo4j有密集的節點,其中有許多(500K +)關係的節點可能會導致慢下來遍歷一個問題,但你可以使用索引解決此問題得到。除此之外,對於大型數據來說它非常棒,因爲它在磁盤上的存儲效率很高,並且遍歷速度非常快。

+1

@Viclib也許看看Titan會有幫助,而不是Neo4J。它專注於使用像HBase或Cassandra這樣的後端存儲進行分片。 – LMeyer

+0

是的,這將是一個替代方案,但我只熟練Neo4j。 Titan是否通過鍵/值配對來實現節點/關係連接? – Nicholas

+0

從未使用過它。我知道節點基本上是K/V的集合,但不確定關係。這似乎是這樣看的文檔時:https://github.com/tinkerpop/blueprints/wiki/Property-Graph-Model「每條邊從關鍵值映射定義的屬性的集合。」 – LMeyer

1

定義 「巨大的」。如果你能適應Neo4J的限制/限制或者有一個自然的和合乎邏輯的分片模型,Neo4J將是一個更簡潔/更簡單/更強大的方法,並且需要更少的代碼。正如尼古拉斯所說,如果你的數據庫會有很多「熱點」節點(很多關係),你可能會遇到一些挑戰,但是通常你可以使用應用程序設計方法來解決這個限制。

相關問題