有一定的價值,X,其中我記錄每30秒,目前正在與三個字段數據庫:數據庫設計 - 有多少數據存儲,性能VS質量
- ID
- 時間
- 價值
我然後創建一個移動應用程序將利用這些數據來繪製圖表的看法:
- 最後一小時
- 過去24小時。
- 7日
- 30日
- 年
顯然,每30秒保存的最後一年,然後將該數據發送到移動設備將太多(這將意味着發送1051200個值)。 我的第二個想法可能是我可以使用MySQL中的平均函數,例如,收集每7天的所有平均值(創建一年52點),併發送這些點。這會起作用,但MySQL仍然會通過創建平均值來拖網,如果有許多用戶連接,這將會很糟糕。因此,簡單地說,如果這些是我的觀點,那麼我不需要跟蹤所有的數據。沒有人應該關心一年前x的精度爲每30秒,這很好。我應該可以使用「觸發器」來創建一些平均值。
我找人來檢查我有什麼下面是合理的:
- 商店每隔30s值表(這將被用於小時來看,120點)
- 當在30s表格中120行(120 * 30s = 60分鐘= 1小時),使用觸發器在「半小時平均」表格中存儲前半個小時,從30s表格中刪除前60個條目。這張新表格需要有一個ID,開始時間,結束時間和價值。這個半小時平均值將用於24小時視圖(48個數據點)。
- 當半小時表超過24個條目(12小時)時,將前6個平均值存儲在6小時平均表中,然後從表中刪除。這個6小時平均值將用於7天視圖(28個數據點)。
- 當6小時表中有8個條目時,刪除前4個並將其存儲爲平均一天,以便在30天視圖(30個數據點)中使用。
- 當日視圖中有14個條目時,刪除前7個並存儲在星期表中,這將用於年視圖。
這似乎不是對我來說最好的方式,因爲它似乎比我想象的要複雜得多。
另一種方法是保留所有數據並讓mysql在需要時查找平均值。這將創建一個巨大的龐大數據庫。我還沒有關於性能的想法。該id是一個int,時間是一個日期時間,值是一個浮點數。 1051200記錄太多了嗎?現在是加入的好時機,我想在一個覆盆子pi上運行它,但是如果沒有,我確實有我可以使用的主機。
您正在尋找一些RRD樂趣。 – frlan
1051200記錄不算什麼,特別是對於像你這樣只有少量列的數據庫,並且使用正確的索引時,您不應該注意到性能問題。 – Ryan
約定,超過一百萬條記錄對於大多數RDBMS(甚至是一些內存條中的內容,尤其是如果這是您唯一的表 - 大約36MB的原始數據)是沒有意義的。我希望在移動系統上避免的一件事情是運營商數據限制,如果您將原始數據下載到設備(每天都是這樣 - 如果是行,則它的大小很普通)。 –