为了确定某个对象的使用频率,我使用了包含以下字段的表格;
id - objectID - timestamp
每次使用一个对象时,都会添加它的ID和time()
。这样我就可以确定对象在最后一小时/分钟/秒等中的使用频率等。
一小时后,这行没用(我上面一小时没检查)。但是,我的理解是简单地删除行是不明智的,因为它可能会弄乱主键(auto_increment ID)。
所以我添加了一个名为“active”的字段。在检查对象的使用频率之前,我遍历所有WHERE active=1
并在超过1小时后将其设置为0。我不认为这会在多个用户之间产生任何并发问题,但这给我留下了大量未使用的数据。
现在我想也许最好在插入新的使用数据之前检查是否有一个带active=0
的字段,然后再插入一个新行,用新数据更新一个,并再次将活动设置为1。但是,这将需要表锁定以防止多个客户端更新同一行。
有人可以对此有所了解吗?
答案 0 :(得分:2)
我从来没有听说过删除行会弄乱主键。
您是否可能尝试确保id
自动分配的auto_increment
值与另一个表的值匹配?这不是必需的 - 您只需使用INTEGER PRIMARY KEY
作为id
列并明确指定值。
答案 1 :(得分:1)
您可以执行与所有超过1小时的行匹配的更新查询。
UPDATE table SET active=0 WHERE timestamp < now() - interval 1 hour