我開始了一個具有一些分層數據的新項目,並且我正在查看將數據存儲在數據庫中的所有選項。數據庫中的分層數據:遞歸查詢與封閉表與圖數據庫的比較
我使用PostgreSQL,它允許遞歸查詢。我還研究了關係數據庫的設計模式,例如closure tables,我看了一下圖形數據庫解決方案,比如neo4j。
我發現很難決定這些選項。例如:鑑於我的RDBMS允許遞歸查詢,使用閉包表還是有意義的,並且在可維護性和性能方面如何與圖數據庫解決方案進行比較?
任何意見/經驗將不勝感激!
我開始了一個具有一些分層數據的新項目,並且我正在查看將數據存儲在數據庫中的所有選項。數據庫中的分層數據:遞歸查詢與封閉表與圖數據庫的比較
我使用PostgreSQL,它允許遞歸查詢。我還研究了關係數據庫的設計模式,例如closure tables,我看了一下圖形數據庫解決方案,比如neo4j。
我發現很難決定這些選項。例如:鑑於我的RDBMS允許遞歸查詢,使用閉包表還是有意義的,並且在可維護性和性能方面如何與圖數據庫解決方案進行比較?
任何意見/經驗將不勝感激!
全封閉表是多餘的,如果你可以使用遞歸查詢:)
我認爲這是更好的有,你必須比處理額外的IO(和磁盤空間,一旦找出一個複雜的遞歸查詢)的一個單獨的表和相關的觸發器。
我已經在postgres中用遞歸查詢做了一些簡單的測試。在表中有幾百萬行的查詢仍然是< 10ms,用於返回特定孩子的所有父母。返回所有的孩子也很快,這取決於父母的水平。它似乎更依賴磁盤IO獲取行而不是查詢速度本身。這是單用戶完成的,所以不知道它如何在負載下執行。如果你還可以將大部分表格保存在內存中(並正確設置postgres),我懷疑它會非常快。通過父母身份對錶進行聚類似乎也有所幫助。
閉合表的級別字段(「深度」)是多餘的。它只需要一個遞歸查詢來計算它。總結一下。
這個封閉表的東西實際上是非常整齊。如果你有遞歸查詢,但不必要,但仍然非常整齊。感謝您的關注。 –