2014-05-14 69 views
2

我正在使用分層數據,如在樹結構中一樣。我想知道什麼是將它們存儲在數據庫中的最佳方式。以最佳方式存儲分層數據:NoSQL或SQL

我以MySQL的鄰接表開始。但隨着數據的增加,性能似乎會下降。我有大約20,000行與父子關係存儲在一個MySQL表中,將來會增加。抓取數據需要很長時間,因爲我必須根據樹的深度編寫許多自連接。

所以我正在尋找最好的方式來存儲這種數據。在我發現的地方,嵌套集比鄰接列表更好。然後我被建議看看NoSQL,如果這能解決我的問題。所以我現在很困惑,不管是留在SQL中還是進入No SQL,或者是否有其他最好的方式來處理這種數據。

所以任何人都可以告訴我什麼是最好的方法?

+0

你打算如何處理你的數據?您是否需要強大的一致性或特定類型的操作性能?你想要SQL嗎? – LMeyer

+0

我需要更好的性能,因爲我在我的SQL查詢中使用了許多連接。我已經在使用MySQL。我打算有很多讀取,而不是寫入數據庫。 – Kushi

回答

3

如果MySQL給你提供了比解決問題更多的麻煩,我會看看MongoDB,CouchDB或ElasticSearch(取決於你的用例)。甚至可能是Neo4j。您的選擇應該歸結爲幾點,如複製,擴展容量,一致性......我建議您在決定之前仔細閱讀一些官方文檔。這裏有一個starting point作比較。

外出時的NoSQL將擺脫所有的連接和提高你的表現,但你仍然需要使用鄰接表,嵌套集合來實現適當的層次結構,物化路徑和這樣...

記住的NoSQL上述技術幾乎都使用最終一致性,這基本上意味着在某些節點的給定時間,您的數據可能不一致。如果這是一個問題,你應該堅持RDBMS。

+0

感謝您的回覆。但我不明白你的意思是**數據可能不一致**。你可以給我一個例子! – Kushi

+0

@Kushi它指CAP定理中的一致性屬性。你可以閱讀[this](http://stackoverflow.com/questions/5466012/nosql-and-eventual-consistency-real-world-examples)來解釋。 – LMeyer