首页 新闻 会员 周边

mysql 数据库循环插入删除的问题

0
[已关闭问题] 关闭于 2017-08-08 13:29

我现在在做一个系统,使用的mysql数据库,其中有一个需求是这样的:单表最高储存4W条数据,如果超过,删除最老的数据,然后插入最新的数据

现在问题是 如果这样做就是每次就需要判断数据的数量,然后删除一条,在插入一条,非常麻烦,在数据量非常大的时候,基本上就是刚插入马上就要删除了,还有就是内存也不大,不能把数据都缓存,请问一下大家有没有好的解决方案,谢谢

FallingStone的主页 FallingStone | 初学一级 | 园豆:38
提问于:2017-06-27 18:04
< >
分享
所有回答(6)
0

这4w条数据干嘛的呢,放内存里面就好了呗

czd890 | 园豆:14412 (专家六级) | 2017-06-27 18:16
0

可以创建一个循环的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条数据,并自动删除旧数据。

未严格测试

TCG2008 | 园豆:1150 (小虾三级) | 2017-06-27 19:09
0

一般这基本是假需求,除非非常特别的场景,没有必要保持一定是4万条,前后有个1000条误差,你就不需要这么忙了。

到41000条就删除2000条。类似这样。

当然,真有这种4万条的需求,相信也不差钱了,扔几千万下去总是能有个响声的。

爱编程的大叔 | 园豆:30839 (高人七级) | 2017-06-28 09:27
0

我觉得2楼的方法可以参考,另一种就换mongo,直接上capped collection

Daniel Cai | 园豆:10424 (专家六级) | 2017-06-28 10:08
0

其实你这个需求我觉得有一个隐含的条件吧,当插入数据后数据总量不超过4w的时候,就不需要删除记录,超过4w的时候,每次插入都需要删除记录,而你可以利用MySQL插入数据主键自增的特性,当返回的主键id超过4w的时候就去删除,要删除多少条记录就去判断。这个场景我建议先插入再删除会比较好,如果有并发的话,最好再加上锁吧。

trustme326 | 园豆:391 (菜鸟二级) | 2017-06-28 16:53
0

写个触发器啊。。。

Постой! | 园豆:1084 (小虾三级) | 2017-07-07 15:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册