2012-07-03 123 views
8

這是最佳實踐的一個問題,據我所知,有很多的這樣做不同的選擇,但我想你的意見來,你會如何處理解決這個問題。請認爲這個系統的性能至關重要,換句話說就是可擴展的。neo4j - 圖形數據庫以及關係數據庫?

我最近發現了圖形數據庫的奇蹟,所以我想出了一個公司想要管理它的客戶關係的理論情況,爲了做到這一點,他們將使用neo4j,這是很棒的,並允許對於客戶,不同員工和他們之間的關係進行真正的強大管理,這非常棒,但是公司現在想要創建一個需要認證的基於Web的界面,並且neo4j數據庫中的任何人都應該能夠登錄系統爲了瞭解它們與公司數據庫中其他人的關係,每個用戶必須有一個與他們的姓名相關的密碼/電子郵件/ ID。

所以我的問題是,在這種情況下,最好將password_hash/password_salt/id/email存儲在mysql數據庫中,然後根據節點在mysql數據庫中查找它。或者,最好將password_hash/password_salt/id/email存儲在節點內的散列表中。

此外,每個商店都有1000個產品,它們可以存儲在圖形數據庫中,或者我可以將產品存儲在mysql數據庫中,然後在那裏查找產品,並在那裏進行更改,因爲產品不是所以沒有必要將它們存儲在圖形數據庫中,所以它們不應該存儲在那裏以提高性能?

所以我的問題歸結爲:這是最好的大項目與更常見的RDM數據庫一起使用圖形數據庫如MySQL?如果不是,那麼你開始使用這兩個數據庫系統的意義何在?

道歉提前爲我的缺乏有關數據庫術語知識。

回答

9

圖DB主要用於維護關係。如果應用程序有圖形數據庫,並不意味着該應用程序需要將所有內容存儲在圖形數據庫中。

Graph上的每個節點請求都在內存中,因此如果您的節點中有不必要的屬性,它將會變得臃腫,並且可能使事情變得更慢,並佔用更多的內存。我通常會決定需要去哪些圖形以及需要去哪些內容在DB中通過非常簡單的規則。

高電平屬性(定義定義該節點的關係和其它重要性能)變爲圖表而附加信息中去RDMS。

例如在FB可以是FBID,名稱進去圖形,因爲它定義了與另一個節點之間的關係。但是,當用戶點擊某人的臉書ID時,他/她會看到其他用戶DOB,年齡,大學。所有這些都可以進入RDBMS。

PS:RDMS有另一個優點,它可以用於快速分析。我知道圖也可以做到這一點,但我不確定它是否像RDBMS一樣可擴展和容易。

該方法的缺點是:您需要維護兩個DBS。

0

如果有數據存儲在圖形數據庫(例如neo4j/orientDB)中並沒有多大意義,那麼應該使用這兩個數據庫(並且某些數據在圖形數據庫中會更好,而不是關係數據庫)。在一個平臺上強制數據可能會導致性能/可伸縮性下降。

+0

@mursalat - 這些天一直都在使用多個數據庫(特別是技術發揮更大作用的地方)。如果規模對您而言是一個嚴重問題,您應該選擇最佳的工具/選擇,即使這意味着超過一個或兩個數據庫。 –

2

除非你有一個兩DB解決方案被證明的情況下,我會說運動部件少,將讓你更加靈活,更能夠迅速改變的事情。如果稍後您發現難以使用的用例,那麼請權衡引入第二個存儲的成本/收益。雙數據庫架構並不是聞所未聞,但帶來了開銷。

具體到安全性,沒有理由Neo4j的或任何其他合理的NOSQL解決方案無法做到這一點:http://spring.neo4j.org/docs#tutorial_security

+1

_雙數據庫架構並非聞所未聞,我真正希望聽到的是,我只是在考慮系統未來的可擴展性,這非常重要。謝謝! – mur