mysql,强制表中的有限条目

时间:2009-02-15 20:11:19

标签: mysql memory-table

我在内存表中保留了一些临时数据。我只需要20个最近的条目,并希望数据始终在堆上。我该怎么做到这一点?我确定我无法对内存表做什么,但我应该如何处理条目表?我应该添加一个自动增加键并删除最旧的,只要我想推送一个新值?

2 个答案:

答案 0 :(得分:1)

您能否详细描述一下您想要做什么?我不明白为什么你只想使用具有降序和LIMIT 20的SELECT时,为什么要将最新数据保存在附加表中。如果SELECT查询过于昂贵,那么只需使用memcached或类似的方法缓存结果,并在每次插入新数据时清除缓存。

如果真的需要附加表,有几种方法可以从表中删除旧数据。您可以获取第20个最近数据的ID(再次降序和LIMIT 19,1并删除ID较小的所有内容(如果您有自动增量索引,时间戳等)或者SELECT COUNT(*)然后按升序和DELETE(所有项目 - 20)执行LIMIT。这可以打包到每隔几分钟运行一次的cronjob中。

但我真的建议使用缓存并查看表定义。有了不错的指数,应该没有任何问题。

答案 1 :(得分:0)

可以附加到20条目表并删除最旧元素(即具有最小ID的元素?)。但请注意,这会破坏表格。

只要您偶尔运行OPTIMIZE,就可以了。

另一种方法是预先分配20个条目,并保留一个单独的计数器,其中哪个条目是最新的。然后,您将根据计数器更新项目ID,而不是插入/删除,然后您将增加(mod 20 + 1)并再次存储。

但请注意,这两种模型仅适用于“单线程”模型。如果表上运行了多个线程,它们可能会发生冲突。

如果计数器在程序存储器中,由线程共享但保护正确,那么这将是线程安全且高效的。