2016-11-23 34 views
0

我是新來的使用數據。使用MangoDB進行數據建模?

所以我有很多基於時間的數據。

每15分鐘數據行。我應該計算數據併爲數據庫中的每1小時,1天,1個月存儲數據嗎?

如果我這樣做,這個模式是好的。

{ 
    _id: "joe", 
    name: "Joe Bookreader", 
    time min: [ 
       { 
        time: "1", 
        steps: "10" 
       }, 
       { 
        time: "2", 
        steps: "4" 
       } 
       ] 
    time day: [ 
       { 
        time: "1", 
        steps: "30" 
       }, 
       { 
        time: "2", 
        steps: "30" 
       } 
       ] 

} 

如果您對如何使用noSQL提高數據建模知識有任何建議,我將非常感激。

回答

0

從程序化方法到問題一分鐘,並思考手頭的任務。

如何在存儲數據後使用該數據?當您使用數據時,重要的是要確切瞭解特定用戶的步驟數量,或者您希望根據特定採樣時間點的時間查看大圖。

如果你關心每個用戶的角度,那麼你的計劃上面將工作。另一方面,如果您想運行全球報告,例如在特定時間內用戶的平均(或總計)距離,那麼我會選擇使用您的文檔是時間的時間表(時間點或時間範圍),而用戶和步驟是你的屬性。

數據庫中另一個重要的概念不是靜態存儲可以實時計算的數據。與任何規則一樣,這有一些例外。像緩存值一樣短,如果它們不正確,它們將不會對應用程序產生重大影響。另一個是報告,您根據當前值爲用戶生成報告並存儲它。如果用戶想要獲取新數據,用戶將重新運行報告。 (我確信其他人很少)

但是在大多數情況下,服務過期/錯誤數據導致基於該數據做出錯誤決策的風險將超過避免額外計算的性能好處。

我提到這一點的原因,是因爲您正在存儲time mintime day。如果time day可以根據time min進行計算,則不應將其存儲在數據庫中,而應當實時計算。您可以編寫查詢,生成time day的實際結果,而無需在應用程序節點上使用任何額外的計算能力。所有計算都將在數據節點上完成,比計算節點更有效,並且不會受到網絡處罰。

我意識到這篇文章有點舊,但我希望我的回答能幫助別人。

相關問題