2015-09-29 44 views
0

我正在使用關係數據庫和圖形數據庫(sqlite和neo4j)的應用程序。我試圖看看我是否無法擺脫sqlite只使用neo4j,而我面臨着冗餘問題。如何處理Neo4j中的高冗餘?

假設我有代表音軌的節點。我想存儲每首曲目的音樂類型。隨着成千上萬的節點,我不認爲重複「南非Psytrance」作爲一個字符串屬性是一個好主意,我敢肯定,創建一個「南非Psytrance」節點和鏈接它到所有有關節點是一個更糟的想法(瓶頸?)。

我說得對,如果我說,使用1)性能佔用太多空間,並使用2)關係是一個糟糕的設計,這方面的問題?

當前代碼使用sqlite數據庫來存儲一組音樂流派,並將它們的索引作爲節點中的屬性(將其轉換爲應用程序層中的字符串表示形式)。

有沒有辦法只使用neo4j並避免瓶頸和冗餘?

回答

2

選項1絕對不是要走的路,因爲它會浪費空間並與良好的圖形數據庫設計相悖。

選項2是您使用圖形數據庫完成此操作的經典方法。有很多neo4j數據庫的例子,每個節點的關係數量非常大。而且neo4j目前在一個數據庫中支持高達34 billion的關係,因此幾乎沒有可能超過容量限制的危險。所以,我會建議你至少嘗試使用這種方法。

也有一些關於使用neo4j存儲類似數據的人的博客。例如:

[EDITED]

正如@Pawamoy提及意味着幻燈片,實際上是第三種選擇。也就是說,您可以爲每個流派創建一個特定的節點標籤,並將適當的流派標籤(節點可以有多個)應用於每個軌道節點。這將允許您避免使用流派的關係。然而,由於標籤至少感覺像「節點類型」,並且「音樂流派」不是「專輯曲目」,所以它傾向於「混淆」標籤空間。而且,neo4j支持每個節點標籤的very limited number,並且DB中標籤的最大數量也相對較小。所以,我不會使用這種方法,除非這樣做有明確的優勢,並且容量限制不是問題。

+0

同意。 OP的「瓶頸」概念在這裏並不適用。這個概念錯誤適用;通過節點放置實例不會以任何有意義的方式構成「瓶頸」。歸結起來,neo4j使得節點和資源的使用變得簡單和高效,所以這應該是一種前瞻性的方法。 – FrobberOfBits

+0

非常有趣的鏈接,謝謝!關於瓶頸:這是我在[這些幻燈片]的第19頁上閱讀的內容(http://fr.slideshare.net/thobe/building-applications-with-a-graph-database)。我擔心一個節點上的數千個關係會影響性能。我會接受這個答案作爲解決方案,並試一試;) – Pawamoy

+0

有趣的。我在回答中增加了更多想法。 – cybersam