关于数据库高并发插入的版本号问题

查看 496|回复 49
avadakur
OP
  
userid & total_version 设置成组合 uniq key,插入失败就重新插入就行了吧
avadakur
OP
  
@shinelamla
@markgor 这是一个好方法 我会尝试从此方面入手,因为有需求是根据某个版本号,返回全部的 config_id ,在查询时我要先将 userid,business_type 排序,获取对应的入参版本号的记录,获取时间戳,返回该小于该时间戳的所有 config_id
themostlazyman   
@zhengwenk 同一个用户账号在多端同时操作这个业务的配置信息
avadakur
OP
  
@avadakur 插入时用 redis 上锁对数据库性能没影响。你这个插入时的版本号为啥不是 1 ,不太理解插入为啥最大版本号,不建议把业务表当日志表。
yuyuf   
@themostlazyman 插入的版本号是用户的总版本号,比如用户插入了配置 A ,此时 version=1 ,用户再次插入配置 B ,此时 version=2 ,版本号记录了用户的所有操作记录
yuanwenpu00   
你这是针对每个用户 id 的共享资源,再高并发,每个用户能同时有多少操作。更新用乐观锁,插入用悲观锁
9fan   
数据库记录锁。应该能解决。代码里的锁不保险。
dog82   
insert into article_views(url, views)
values (#{url}, #{views})
on duplicate key update views = views + #{views} 类似这种吗
aminaSucci   
最简单的就是不要先查,而是在改的语句里查一下,不过这依然会出问题……
可以用队列和分布式锁,不过比较麻烦。
-----------
其实楼主的问题根本不是问题,userid,business_type 做联合主键,天然唯一,根本不需要版本号
AceGo   
我昨天也遇到了这个问题,我是把这张表的自增 id 赋值给 total_version ,因为我对 total_version 没有别的要求,只要 userid | business_type 确定时,total_version 递增不重复就行。
您需要登录后才可以回帖 登录 | 立即注册

返回顶部