在我的应用程序中触发了许多不同类型的事件 - 我想随着时间对它们进行计数以跟踪。将时间间隔抽样统计到数据库中
我想弄清楚这样做的最佳方法。我将有多个服务器和线程保存事件,因此它必须在并发期间工作。
每个事件我不能有一行,因为事件的数量非常大,所以必须以某种方式进行汇总。
所以,我试图让每个事件类型的表行和“时间间隔”像
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