精华内容
下载资源
问答
  • SQLServer中防止并发插入重复数据,大致有以下几种方法: 1.使用Primary Key,Unique Key等在数据库层面让重复数据无法插入。 2.插入时使用条件 insert into Table(****) select **** where not exists(select 1 ...
  • 问题描述 首先,看一下我的表结构。 CREATE TABLE `coolq_qq_group_message_receiver` ( `id` int(11) NOT NULL AUTO_INCREMENT, `qq_group_number` varchar(12) NOT NULL COMMENT 'QQ群号码', ...
  • 主要介绍了java解决并发数据重复问题 ,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 解决并发数据重复

    千次阅读 2018-03-20 18:16:08
    背景介绍 数据库出现了单个字段数据重复问题。...在网络拥堵、或者数据库反应迟缓、或是同时有多个请求同时请求时就会出现数据重复问题,也就是同时出现了多条用户名为【xiaoming】的数据。出现错误是因为a请刚...

    背景介绍

    • 数据库出现了单个字段数据重复问题。例如用户表中的userName字段,虽然不是主键,但也不允许数据重复。此处就此问题的排查进行一个记录,希望可以给遇到了相同问题的朋友提供一个解决思路。
    • 代码的业务逻辑如下图
      在这里插入图片描述

    问题定位

    • 在网络拥堵、数据库反应迟缓、同时有多个请求同时请求时就会出现数据重复问题,即同时出现了多条用户名为【xiaoming】的数据。错误原因是user1的请求正处于耗时的验证过程中,即将新增数据,这时user2的请求也进入了验证阶段,此时数据库中并没有‘xiaoming’这条数据,所以user2的请求也通过了验证,结果就出现了重复数据。即user2验证的时候user1还没执行新增过程。

    解决思路

    • 尽量缩短查询验证和数据插入的时间,提前做好数据组装工作,验证完数据库立刻进行增加或者修改的操作。
    • 如果是特别重要的数据可以对表进行加锁,或者代码进行加锁,防止多个请求同时访问。
    • 可以针对单个字段加唯一索引,SQL Server加唯一索引的条件是库中这个字段数据不重复且字段长度小于900字节。Sqlserver建立索引可以参考SQL server建立索引
    展开全文
  • 系统高并发出现 重复数据 怎么解决? 系统随着业务的增长,接口请求量也增加。最常见的问题数据重复,涉及到资金的影响就很大。还有问题就是查询少量的数据,要很长时间。其他还有其他一些问题。这次先介绍处理数据...

     系统高并发出现 重复数据 怎么解决?

        系统随着业务的增长,接口请求量也增加。最常见的问题数据重复,涉及到资金的影响就很大。还有问题就是查询少量的数据,要很长时间。其他还有其他一些问题。这次先介绍处理数据重复,响应时间长的问题。

       1 数据重复问题处理

          1.1 重复出现有以下原因

             A 前端按钮在用户点击后,没及时让按钮点击失效,用户网络卡,多次点击,就会出现重复。这种导致的,解决办法用户点击按钮后,让按钮点击失效。

            B 脚本调用接口,同个时间点,提交大量相同请求。碰到这种,成本最低处理办法,数据库表字段加唯一键约束。

      还有另一种比较好的处理办法,成本稍微高点,对系统本身,用户 比较好。系统集群,单机通通能搞定。想知道解决办法,微信扫下面二维码,回复 高并发,就可以获取

          1.2 网上介绍些处理的办法,都差不多,如下。(下面用工具测试,重复还会出现。这种普通用户多次点击,还是能防的住)

             A 判断请求URL和数据是否与上次相同,如果和上次相同,则是重复提交表单,返回提示给用户。有效时间为10秒

     2 请求响应时间过长处理

       2.1 响应时间长的原因如下

        A 用户量快速增长,系统请求量也变多。单机处理不了太多请求。像这种可以通过服务器集群就可以缓解。

        B SQL查询耗时长,返回变慢了。通过数据库慢日志,定位耗时长SQL进行优化

        C 接口返回太多数据。没必要的数据不要返回

        D 服务器网络带宽小。适当增加

        E 图片太大。适当压缩

        F 页面太大。优化页面

        G DNS解析时间过长。

    有疑问关注公众号留言,获取学习资料,回复学习。

     
    展开全文
  • 并发插入重复数据问题

    千次阅读 2019-04-28 15:19:39
    背景:项目中有一块分析数据的功能,在多线程执行用例的时候,每次一个用例执行完,如果执行失败,都会调用分析模块。而分析的方式就是对执行返回的结果和相关的日志进行错误聚类分析。当一批用例执行结束之后,会发...

    背景:项目中有一块分析数据的功能,在多线程执行用例的时候,每次一个用例执行完,如果执行失败,都会调用分析模块。而分析的方式就是对执行返回的结果和相关的日志进行错误聚类分析。当一批用例执行结束之后,会发邮件报告。

    设计思路:采用数据字典的思路,把每次出现的错误都当作一个错误标签存储起来,如果字典中有,就直接关联此次执行结果;如果字典中没有,就插入标签再进行关联。错误标签包括错误内容和对应的应用,关联关系通过插入关联数据来实现。

    问题:

      1.单机器:多线程执行case,会有多个线程都在执行分析的操作。如果在较短时间内的几个用例,恰好分析出来的候选标签是同一个,并且从数据字典匹配出来没有此标签,就会导致插入重复的标签。 

      2.多机器(单机器的问题解决的情况下):因为数据字典是跟业务域挂钩的,不同的业务域对应自己的数据字典。如果访问相同业务域的tag,还是会出现插入重复标签的问题,毕竟访问的都是同一个数据库。

     

    解决方案分析:

    (1)直接设置同步

         最直接的方式就是在分析的逻辑上加synchronized关键字,控制同步。这样一劳永逸,管你多少个并发,分析的时候一个个分析,一个个做db操作。

         但是有一个问题,分析是有比较长的时间损耗的,这中间回去调一些RPC服务。当大批量用例执行的时候,如果此次执行错误的个数很多,很容易出现大批量线程卡在分析模块的情况。那么极端情况下,最后一个线程执行的时间点=用例个数*分析时间。导致此次批量执行时间拉的很长,影响用户体验。

    (2)缓存数据

         在每一次执行之后,都把需要插入标签的数据都放到缓存中暂时存着。只需要插入关联关系的数据则直接插入,因为每个线程对应一个执行结果id,关联关系的数据不会插入重复。在这一批用例都执行结束之后,统一对缓存中的数据做处理。把需要插入的tag和其相关的执行结果id做map,这样一个tag就对应一组执行结果id。插入tag并把其对应的一组执行结果id都关联到这个tag上。

        这样的话,相当于把纯db操作留在了执行完毕和邮件组发送之前去做,分析的时间继续放在执行流程中去做。那么db操作的时间总的来说不会很慢,邮件的发送时间会推迟若干秒,不会产生太大影响。

    (3)数据库层做处理

        在db层做收口,既然所有的数据都走一个db,那就在db层做点文章。

      a)ON DUPLICATE KEY UPDATE 

         首先在标签表中,给标签内容和对应的应用加个联合唯一索引,在maybatis插入语句中增加ON DUPLICATE KEY UPDATE,利用这种机制,当插入相同数据的时候就update时间或者直接不做其他操作。只要不插入重复数据即可。

      b)insert ignore 

        使用ignore关键字,也是需要给标签内容和对应的应用加个联合唯一索引。ignore监测唯一索引,自动跳过重复数据,插入未重复数据。这样不会报错,可以根据返回的影响行数来判读是否插入数据。

        数据层处理的好处是原有的逻辑基本不用改,代码改动量很少。但是需要加组合唯一索引,这反而不太好改。因为之前的设计,为了预防标签的错误内容过长,设置的数据格式为longtext,所以加索引是需要设置前缀的。那么标签内容需要限制长度,否则索引会起不到效果。

     总结:

    (1)总体来说,第一种方案可以排除掉了。第二种和第三种都可以解决多机器的问题。

    (2)第二种方式实现起来比较麻烦,需要改动的地方较多,可以作为保底方案。第三种方案最简洁,但是内部原理和执行的效率需要确认。

      (持续更新...)

    展开全文
  • 解决高并发数据插入重复问题

    千次阅读 2019-05-07 10:25:23
    https://blog.csdn.net/nikobelic8/article/details/53308543
    展开全文
  • $lock_status = $redis->get('lock_state'); if ($lock_status == 0 || empty($lock_status)) { $redis->set('lock_state', 3600, 1); #操作上锁 #操作代码 ...set('lock_state', 3600...
  • laravel php 并发插入数据重复问题

    千次阅读 2020-11-20 09:37:25
    场景:在并发插入更新的情况下,数据库会出现重复数据的情况出现 下面是一段laravel的示例代码 主要逻辑是判断tt,yy的va字段为空才会执行更新va字段和创建数据,以下为正确示例 在进行并发100测试的时候,出现...
  • Mysql 表字段修改 并发情况下避免重复一,场景二,问题三,解决方案 一,场景  多个用户同时修改用户名时,存在用户名相同的情况,而由于业务需要,用户名是不允许相同的,需要避免重复。 二,问题  sql语句举例...
  • 解决并发导致数据异常问题

    千次阅读 2018-11-15 11:05:50
    通常我们数据异常是由于并发导致的,那么我们如何避免这种问题呢? 举例: 当用户买充值卡时,我们一般会先查取数据库,然后改数据状态,给用户返回充值卡号,那问题来了 当同一时刻的用户一起购买充值卡时,就...
  • 数据库有一字段:orderNo,orderNo的规则:20170327000001、20170327000002依次往后累加。。。并发时怎么避免存入重复
  • 在系统开发过程中,经常遇到数据重复插入、重复更新、消息重发发送等等问题,因为应用系统的复杂逻辑以及网络交互存在的不确定性,会导致这一重复现象,但是有些逻辑是需要有幂等特性的,否则造成的后果会比较严重,...
  • 并发 防止 重复提交唯一数据

    千次阅读 2017-05-03 11:36:13
    方法一:应用在数据库上, 保证用户名这个字段加上非重复约束的就可以了,真是出现重复了,就把这个抛出成异常,给Java程序判断吧。
  • 一家文学网站向我系统推多线程低并发推送数据,我这边观察日志和数据库,发现有一个作者被存储了2次到数据库中。按照程序的编写逻辑,重复数据是会被判断出来不被存储的。2.原因分析 由于网络原因,客户可能连续推...
  • 在整个供应链系统中,会有很多种单据(采购单、入库单、到货单、运单等等),在涉及写单据数据的接口时(增删改操作),即使前端做了相关限制,还是有可能因为网络或异常操作产生并发重复调用的情况,导致对相同单据...
  • 表单没有做防重复提交,导致出现多个请求,2. 后端保存接口并发时无法判断同一表单的请求。 二、过程 Round 1:在表单提交后,把按钮置为disabled FAIL:这种解决方案太依赖前端,并且无法保证刷新时重复...
  • Tomato就是解决并发导致重复提交,而Easy-Sentinel会更高级一点,利用Redis+Lua脚本实现原子性操作,从而来达到防洪限流的能力。 关注程序员闪充宝后台回复“666”和“111”免费领取46阶段以及实战java视频资料 看...
  • 有一个线程的问题,就是假如 我有一个文件,然后这个文件有很多条数据,假如有两个字段,一个学号一个钱,(我的需求是,读取文件,把数据插入到表里,先拿文件的学号去查表有这个数据,就把钱进行相加,没有就新增...
  • TP5高并发不存现重复数据

    千次阅读 2018-12-24 09:57:25
    当我们想要进行一个 查询当前数据表里某个值最大值,然后+1存入表里,如果有高并发,就会出现两个操作,同时进行,出现两次查询都查出...tp5的lock,要搭配事务一起使用,就可以实现,高并发,不会出现重复数据 ...
  • 昨天面试,被面试官问到。。。 比如用户注册时,先要验证用户名是否存在,但是在验证过后可能还会被插入相同用户名的数据,这就造成了冲突。 应该怎么解决?
  • Java多线程:解决高并发环境下数据插入重复问题

    万次阅读 热门讨论 2016-11-23 17:56:53
    1.背景描述 应用框架:Spring + SpringMVC + Hibernate  数据库:Oracle11g 一家文学网站向我系统推多线程低并发推送数据,我...由于网络原因,客户可能连续推送了两条重复数据,两条数据时间间隔非常小,因此导致
  • 所有的方法都先不考虑性能问题,也不考虑业务,只看逻辑上能否达到去重复插入,因为第一,如果唯一性是必须要保证的,那么只能在先实现了,再去考虑优化;第二,如果能通过调整业务来规避,那我后面说的都是废话了...
  • 1.数据库表建联合主键; 2.数据库表建唯一约束; 3.查询和插入放在同一个同步代码块中; 4.查询时锁表; 转载于:https://www.cnblogs.com/RoyalBlue/p/10836715.html...
  • 并发下数据库插入重复数据

    千次阅读 2015-03-30 16:57:21
    方法1: [code="... // 根据username查询数据库中是否存在该数据 Method isInDB(String username); //保存用户 Method saveUser() { boolean flag = Method isInDB(username); ...
  • 并发insert情况下会发生重复数据插入问题 1.背景  用多线程接收推送的订单数据,把接收的订单数据存到一个表中,实现的需求是:如果接收的订单消息在数据库中已经存在,那么执行update操作;如果没有存在,那么...
  • 多线程导致数据重复添加

    千次阅读 2019-02-14 16:00:57
    注意:list.clear()方法不论写在线程里还是外,都会出现数据重复添加的问题,此测试用例过于简单,无法重现list.clear()方法写在线程里出现重复添加的现象,项目中出现过 2.每次启动后添加join即可解决 :输出结果 ...
  • Java防止重复数据多次调用接口导致数据库插入重复记录

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 197,067
精华内容 78,826
关键字:

并发导致重复数据