我有一个Web应用程序,其功能之一就是不断将行附加到大表中。行看起来大致如下:
id bigint not null primary key
visited datetime not null
ip_address
# Other fields
这是一张跟踪表,正如您可能已经猜到的那样。使用此表 是完全附加的,也就是说,它们之后没有修改行 插入。
然而,我们的数据量显着增加,并且有必要 将stats-processing分别处理到其他表中,而不是查询 数据并立即计算。基本上我写了一个独立的程序 大约这样做(伪代码)
while (true) {
Select rows from tracking table where id > last_id
Feed rows to stats processing thread
last_id = max(id from rows)
sleep some amount of time (~30sec is what I'm currently using)
}
但是,我担心我会丢失行。可能会出现ID的差距,因为 当我从跟踪表中选择行时,一些行id有 已被保留,但这些交易中的数据尚未提交,并且已经提交 下一个循环我已经转移到了更新的ID。
我一直想知道如何协调这一点,因为计算时缺少数据 统计数据不是一个真正的选择。
以下是我一直在徘徊的各种选择:
重新设计表格或查询,例如访问时间
不要使用关系数据库,而是某种数据排队系统?
在时滞上查询表格,即WHERE id> last_id AND visited<现在() - 一段时间
也有可能有一个我没有考虑过的选项。哪个最好 查询表的方法,所以我不会错过任何数据?
答案 0 :(得分:0)
这是你可以做到这一点的一种方式(类似你的#2):