在我的應用程序中觸發了許多不同類型的事件 - 我想隨着時間對它們進行計數以跟蹤。將時間間隔抽樣統計到數據庫中
我想弄清楚這樣做的最佳方法。我將有多個服務器和線程保存事件,因此它必須在併發期間工作。
每個事件我不能有一行,因爲事件的數量非常大,所以必須以某種方式進行彙總。
所以,我試圖讓每個事件類型的錶行和「時間間隔」像
COLUMN
------
ID
EVENTTYPE
COUNT
FIRSTTIMESTAMP
LASTTIMESTAMP
我第一次嘗試,使其中一個新行是由記錄器創建了一個解決方案:
UDPATE EVENTCOUNTER SET COUNT = COUNT + 1 WHERE LASTTIMESTAMP > CURRENT TIMESTAMP and EVENTTYPE = ?;
如果num rows updated = 0,則插入帶有新時間戳的新行。
但是,爲了使這項工作,我將不得不鎖定整個表,以便不會有競爭條件從多個線程創建新的行。
即
LOCK TABLE EVENTCOUNTER ..
UPDATE ..
if numRows = 0 then INSERT ..
COMMIT
將由一個很大的這個表鎖衝擊性能?有沒有更好的方法來解決我的問題沒有表鎖?
使用DB2數據庫和Java客戶端 - 實際上Hibernate是否重要。
謝謝。我只是關於如何聚合到同一個表中,但另一個表更有意義。它會使事情變得複雜一些,因爲我不得不在時間範圍內進行分割,但我認爲這是可行的。 – 2013-02-13 14:30:34
擁有單獨的表格將使解決方案更具可擴展性 - 將來您可能希望將聚合信息表移動到單獨的數據庫或甚至單獨的計算機。 – 2013-02-13 16:35:43
是的。可能是一個好主意。 – 2013-02-13 17:11:25