2013-10-01 65 views
0

我有一個數據記錄應用程序。我每30秒記錄10,000個溫度。我需要能夠以小時/每日/每週爲單位計算10,000個物品每個的最小/最大/平均溫度。是否可以在服務器上執行最小/最大/平均計算,還是需要將每個文檔下載到客戶端以進行計算?最小/最大/平均值計算在哪裏?

Andrew

回答

0

可以在服務器上計算或存儲數據庫中的摘要。如果這很重要,請保留原始數據。

提前計算彙總&發送到客戶端/人的級別,比卡車運行大約10,000個樣本沒有人通常想要鑽取的效率高得多。

對於幾乎所有目的而言,具有平均值,最小值,最大值的標準偏差的統計數據將會具有統計意義。

當客戶真正想要的時候,你可以拖下大數據集(10k樣本)並顯示它。

0

當然你要計算在服務器上,但也有很多方法可以考慮:你可以存儲這些

  • 在手動與每個樣本更新特定的文件。這可以起作用,但是你會在單個文檔上施加很多壓力,並且可能導致併發問題。

  • 您可以編寫一個Map/Reduce索引來計算總數。每次你寫一個新文檔時,RavenDB都會用新的總數來更新你的索引。您可以將總值除以總數來得到平均值,並且您可以輕鬆使用最小值和最大值函數。由於您希望以不同的時間間隔查看這些結果,因此您需要多個索引。

    我實際上寫了一個小的演示程序,完全是這樣。它將記錄來自模擬壓力錶的PSI值,而不是溫度。但是這些概念是相同的。這裏有幾個捷徑,如果你仔細閱讀評論,你可能會接受。

    項目地址:Raven Sensors

    我寫這個的時候RavenDB的當前版本是2.0.2261。我有一段時間沒有更新它,但它仍然可以工作並且相關。

  • 我還沒有做很多工作,但RavenDB 2.5添加了一項名爲Dynamic Aggregation的功能。它也通過工作室作爲Dynamic Reporting曝光。實質上,這在查詢時進行聚合。您可能會發現表達您感興趣的聚合數據要容易得多,但它可能比map-reduce方法慢得多。你可能想要試驗。性能差異可能歸結爲集合中有多少項目正在彙總。

相關問題