2017-02-08 90 views
1

我期望爲用戶提供在服務器端存儲服務設置的功能,以允許它們在設備之間同步數據。NoSQL適合存儲用戶數據嗎?

我之前沒有使用NoSQL,所以我不確定它是否合適,但是從我進行的研究看來,這似乎是一個合理的選擇。

因此,舉例來說,如果我是存儲在一個JSON格式的字符串用戶的設置,使用的NoSQL數據庫使用其用戶ID作爲標識,該數據庫將是這個樣子:

ID | Data 
------|------ 
1  | { "Example1":"foo", "Example2":"bar"} 
2  | { "Example1":"bar", "Example2":"foo"} 

這是否合適?關於數據的一個假設是它不會特別規律,因爲用戶將改變一系列不同的設置以適應它們,所以給定的選項是否被啓用將基於用戶而變化很大。這種不規則性使我相信,爲了性能,NoSQL數據庫可能更合適。
客戶端設備不必返回具有多個不同值的長數據集,而是將它們的首選項返回給JSON,並根據需要進行解析。

回答

1

根據您顯示的數據,不,NoSQL不會爲您購買任何東西。它不會傷害任何事情,但關係會起作用。

但是,如果你沒有「數據」列轉換爲字符串,而是儲存起來作爲一個對象:

ID | Example1 | Example2 | Example3 
------|-----------|------------|--------- 
1  | foo  | bar  | 
2  | bar  | foo  | 
3  | blah  | baz  | qux 

然後你開始採取的NoSQL的優勢。也許用戶3正在使用具有附加參數的不同系統。使用NoSQL無關緊要 - 隨時添加一個新列,並且數據庫將存儲它,而無需額外的工作。

當然,閱讀方可能需要了解哪些數據存儲在每一列中。它可能不得不反思數據以查看「Example3」是否存在或者它可能不在意。

總的來說,你得到的最重要的事情就是你可以存儲任何一組數據。事實上,可能存在彼此完全不同的行(儘管如果數據之間存在某些相似性,它往往會更容易)。此外,根據系統的不同,您可能會發現更容易搜索「Example3 = qux」。這有點依賴於提供程序,可能仍需要使用索引來提供快速讀取。

+0

其中一個設置參數可能會有多個重複值,這是我認爲對NoSQL的主要看法。如果用戶可以有多個設置X的元素(例如X的不同配置),那麼您必須在SQL數據庫中創建不同的實例,或者可以爲X中的一個數據集存儲爲JSON數組NoSQL數據庫。系統的體系結構並不需要在服務器端分析數據,因爲數據只是設置配置。由於這個原因,我認爲NoSQL更適用。 – Andrew

相關問題