2012-03-02 55 views
13

在複製數據的變化,我們正在評估的NoSQL爲即將開展的項目。我傾向於以RDBMS的方式來思考事物,並且在概念化缺乏標準化方面遇到困難。如何處理的NoSQL

據我所知,重複數據不被認爲是錯的NoSQL。我無法理解的是修改數據以防止出現異常。

通過實例問題的解釋:

您正在組織一系列撲克錦標賽。你有球員, 地點和錦標賽事件。據我瞭解,比賽 事件可能包含的位置和玩家的集合。它不需要擁有所有玩家數據,但是如果你想獲得名字 和所有參加下一次比賽的家庭地址,那麼這個信息 應該在錦標賽集合中。

有人已結婚並搬家,更改姓氏和 地址。應用程序是否需要更新玩家收集和 比賽集合?還是我的收藏模型錯了? 開發人員如何「跟蹤」重複信息的位置?

回答

10

,我可以看到使用了不少最近的模型是有數據的不可變「主」集合(在你的情況下,球員名單,在模擬「每場比賽球員的比賽名單相關法「其中賽會紀錄有一個只能通過在運行的週期性進程更新玩家ID的列表),和非規範化的列表(在你的情況下,與完全填充的玩家數據比賽的列表)」主「數據。

這樣,應用程序只需要更新主數據,並且定期更新過程最終將重建非規格化結果。

+0

當您說「不可變的」,你是否真的意思是說,如果該主對象上的任何*改變,你將刪除它並創建一個新對象? – 2013-04-01 20:52:51

+1

對不起,可能是那裏的單詞的錯誤使用。通過不可變,我的意思是主列表在創建非規範化列表的過程中未被修改。 – 2013-04-01 23:56:12

9

要做的一件事就是爲每種類型的數據創建一個「記錄系統」或主數據。所有數據都不需要單一來源,但每個數據都應該有一個。

另一個措施是使數據版本化(保留歷史變化),以便非規範化數據可以是不可變的 - 在您的示例中,過去發生的錦標賽的玩家數據適合當時的情況。如果玩家轉移到新地址,那麼您仍然可以通過轉到玩家的「記錄系統」獲取當前地址,但比賽記錄反映他/她的地址等。