2010-11-22 12 views
0

我在寫一個存儲祖先類型數據的ruby應用程序。即家譜。Ancestry類型數據庫的建議:MongoDB,Redis等?

對於其他應用程序,我使用MongoDB進行存儲,因爲它適用於層次結構,但祖先數據不太適合該模型,即使它在某種意義上是分層的。我很好奇,如果有人對我是否應該換用更合適的數據庫層來處理這些問題有所建議?

I.e. A與B(雙向)配對並且具有父母C和D.B具有父母E和F.A和B具有孩子G,H,I。G與H配對,依此類推。

所以它不是完全遞歸的,因爲一個節點有兩個父節點。因此嵌入在MongoDB中沒有意義,因爲父母雙方都會嵌入相同的樹。它更接近於社會圖更剛直(只有兩種關係)。我認爲Redis設置會很好,但在我用Polyglot持久性去複雜化之前,我希望能從其他可能設計出類似結構的設計人員那裏得到一些反饋。我對Redis的其他擔憂是將所有這些樹存儲在內存中可能不是一個好主意,但如果我只是在Redis中將對象數據存儲在MongoDB文檔中,那麼它可能就沒問題。

回答

2

也許你應該嘗試一個圖形數據庫,因爲它聽起來更接近域。並且有很多你可以嘗試http://nosql.mypopescu.com/post/498705278/quick-review-of-existing-graph-databases

+0

我玩過neo4j,它看起來非常漂亮。儘管他們的授權不是很大。事情是一個像mongodb這樣的文檔數據庫,對於我的應用程序的其餘部分來說是完美的,所以我要麼將mongodb用於一切,要麼將混合另一個解決方案,僅用於祖先數據。圖形數據庫會給我比redis集合更多的優勢嗎?看起來像一個圖形數據庫將是矯枉過正。 – 2010-11-22 16:54:00

+0

如果沒有你的應用程序的內容背景,這是不可能的。在使用非關係數據庫時,您需要先考慮兩件事情:如何存儲數據以及如何訪問數據。第二部分從您的描述中遺漏,因此無法回答。你是否需要瀏覽比1級更深的關係(這是你可以通過Redis或Twitter的FlockDB得到的結果)?更一般地說,您需要瀏覽關係並發現其中的方面越多,則圖形數據庫越有意義。 – alexpopescu 2010-11-22 20:48:12

+0

好吧,自發布以來,我一直在研究這個話題。基本上我正在處理一個DAG(Directed Acyclic Graph)。 Neo4j(可能還有其他圖形數據庫)絕對看起來是穿越節點的最佳選擇。用戶將能夠添加一個節點(父親如果不存在,母親如果不存在以及多個孩子)到任何給定的節點,系統將呈現圖形的可視化達到一定的深度,讓我們在聚焦節點的任何方向上說半徑爲3。所以我會遍歷3個節點。肯定會聽起來像一個圖形分貝問題。 – 2010-11-22 21:51:41