2014-01-30 34 views
0

我有一個數據庫,一個表中有大約25 000個用戶。該表同時擁有用戶名和其他幾個colums,這些colums會存儲他們當前速度(加密散列速度)的相關信息,它們的平衡等。此數據庫每7.5分鐘更新一次新的快照數據。目前我只保留最新的數據(最新的更新/插入數據庫)。這工作正常。現在我想繼續開發它,爲每個用戶保留統計數據,並且能夠爲每個用戶顯示平均速度。他們的平均散列速度,一週和一個月的平均餘額等。這將如何?任何開始的建議?我自己沒有提出任何解決方案,所以我就這麼問。統計周和月平均值不必非常精確。謝謝!數據庫設計 - 爲25 000個用戶保留用戶歷史平均數

+0

我認爲在這一點上,你應該看看[datawarehousing](http://en.wikipedia.org/wiki/Data_warehouse)。 –

+0

「當前速度」是您想要存儲的唯一歷史數據嗎? –

+0

@MarcusAdams還有2個字段我想存儲,所有cointaining小數字。 – TutenStain

回答

0

我想用RRD concept 這樣,你就可以預測數據庫的增長,這隻與用戶數量成正比。 任何類型的報告都會非常快速和簡單。您可以放大數字,但隨着時間的推移精度越來越低。

拆分成桶的時間:1分鐘,5分鐘,1小時,1天,1周 假設你每10分鐘有新的快照。 分配空間(列),以保證:

  1. 去年6次實際測量(覆蓋1分鐘)
  2. 5列,以存放數據平均超過1分鐘
  3. 20列,以存放數據平均超過5分鐘
  4. 24保持數據列在1H平均
  5. 7列保持數據平均超過24小時

當你有一個新的快照時,以循環方式將它寫入到#1列中。一旦你要覆蓋第一個 - 計算平均值並將數據寫入#2列。以同樣的循環方式寫入#2類型。上述所有類型均相同。在您平均的每一步(或使用任何其他聚合函數)並向上移動數據。此舉觸發了另一次平均並向上移動。

在任何給定時間,您都可以根據1m,5m,1h,1day,1周時間範圍對平均值進行查看。

你甚至不需要在MySQL或任何你選擇的數據庫中實現它 - 使用可用的RRD工具。

+0

這實際上是一個非常酷且直觀的建議。我不能在我的虛擬主機上安裝定製軟件,所以我會嘗試在MySQL中實現它。感謝您的建議! – TutenStain