我有一个批量导入数据到数据库中的程序,代码主要做2件事情.
1.首先检查数据库中有无重复记录.如果有则返回false,不进行导入操纵.
2.没有重复数据,则导入这批数据.
现在我有这样一个疑问,当我做完检查的时候,系统发现没有重复,于是执行下面的导入操作.
可当我还没提交这批数据时,另一个系统修改了数据库,导致出现重复记录,也就是说出现了数据不一致的问题.
明明在检查的时候没有重复,可在提交的时候出现重复.象这种问题应该怎么解决,或者此类问题的解决思路是怎样的?
是在检查数据有无重复时就锁住整张表?如果要锁表,myBatis里应该怎么做呢?
建议使用如下两种方式之一:
如果记录本身有主键类的标识的话,将这个字段的唯一性设置为True,这样两线程的insert相同记录就会有一个导致失败,Catch这个Exception就可以了,这个方法比较简单;
使用分布式锁,如果题主对Zookpeeper有了解的话可以通过Zookeeper设置加一个分布式锁(比如使用insert的主键标识拼接成为一个path,在insert之前获取锁,insert之后释放锁)
前提是需要有能够设别两条记录是同一条记录的手段。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。