我现在在做一个系统,使用的mysql数据库,其中有一个需求是这样的:单表最高储存4W条数据,如果超过,删除最老的数据,然后插入最新的数据
现在问题是 如果这样做就是每次就需要判断数据的数量,然后删除一条,在插入一条,非常麻烦,在数据量非常大的时候,基本上就是刚插入马上就要删除了,还有就是内存也不大,不能把数据都缓存,请问一下大家有没有好的解决方案,谢谢
这4w条数据干嘛的呢,放内存里面就好了呗
可以创建一个循环的index字段,假设表
CREATE TABLE IF NOT EXISTS `content` ( `id` int(11) NOT NULL AUTO_INCREMENT, `index` int(11) NOT NULL, `text` text NOT NULL, `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `index` (`index`) )
执行sql语句
select (max(id)+1)%5 into @newIndex from `content`; replace INTO `content` ( `index`, `text`) VALUES (@newIndex, '内容内容');
可以让表始终5条数据,并自动删除旧数据。
未严格测试
一般这基本是假需求,除非非常特别的场景,没有必要保持一定是4万条,前后有个1000条误差,你就不需要这么忙了。
到41000条就删除2000条。类似这样。
当然,真有这种4万条的需求,相信也不差钱了,扔几千万下去总是能有个响声的。
我觉得2楼的方法可以参考,另一种就换mongo,直接上capped collection
其实你这个需求我觉得有一个隐含的条件吧,当插入数据后数据总量不超过4w的时候,就不需要删除记录,超过4w的时候,每次插入都需要删除记录,而你可以利用MySQL插入数据主键自增的特性,当返回的主键id超过4w的时候就去删除,要删除多少条记录就去判断。这个场景我建议先插入再删除会比较好,如果有并发的话,最好再加上锁吧。
写个触发器啊。。。