1

为了确定某个对象的使用频率,我使用了一个包含以下字段的表;

id - objectID - timestamp

每次使用一个对象时,它的 ID 都会time()被添加进去。这使我可以确定一个对象在过去一小时/分钟/秒等中的使用频率。

一小时后,该行无用(我没有检查超过一小时)。但是,我的理解是简单地删除该行是不明智的,因为它可能会弄乱主键(auto_increment ID)。

所以我添加了一个名为“活动”的字段。在检查一个对象的使用频率之前,我循环遍历所有对象WHERE active=1,如果超过 1 小时,则将其设置为 0。我认为这不会给多个用户之间带来任何并发问题,但这会给我留下很多未使用的数据。

现在我在想,在插入新的使用数据之前,最好检查是否有一个字段,active=0而不是插入一个新行,用新数据更新那个字段,然后再次将 active 设置为 1。但是,这需要表锁定以防止多个客户端更新同一行。

任何人都可以对此有所了解吗?

4

2 回答 2

2

我从来没有听说过删除行会弄乱主键。

您是否可能试图确保id自动分配的值auto_increment与另一个表的匹配?这不是必需的 - 您可以简单地使用 anINTEGER PRIMARY KEY作为id列并显式分配值。

于 2012-04-22T10:57:34.763 回答
1

您可以执行匹配所有早于 1 小时的行的更新查询。

UPDATE table SET active=0 WHERE timestamp < now() - interval 1 hour
于 2012-04-22T10:56:12.517 回答