位置: 编程技术 - 正文

并发环境下mysql插入检查方案(并发环境下,共享资源的正确使用方式是)

编辑:rootadmin

推荐整理分享并发环境下mysql插入检查方案(并发环境下,共享资源的正确使用方式是),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:mysql并发处理,并发环境下ora01013用户请求取消当前的操作,mysql写并发瓶颈,并发环境下程序的特点,并发环境下程序的特点,并发环境下程序的特点,并发环境下ora01013用户请求取消当前的操作,并发环境下,共享资源的正确使用方法是(),内容如对您有帮助,希望把文章链接给更多的朋友!

业务背景: 基本业务场景是这样的,请求数据(车辆vin信息)进入到接口中,需要先判断其在数据库中的状态,如果库中不存在该vin,或者该vin状态位为“1(已完成)”,则执行一些检查操作后,将数据插入到数据库中,此时新增vin状态为0,调用人工处理接口,十分钟后返回结果,将状态置为1。如果其状态位为“0(正在处理)”则驳回操作,返回提示信息。 在单线程环境下,这样的业务没有问题,然而当并发访问接口时,会出现同时进入两条vin相同的请求AB,正常情况应该插入一条A,驳回一条B。然而并发环境下,B执行检查状态时A还没有插入,因此AB都进入到了数据库中,数据就错误了。

解决方案一: 首先想到的是使用sql处理,对数据库对应字段加唯一索引,保证一致性。如果插入重复的数据,则catch该异常,做出提示。

但是由于业务限制,vin在库中是可以重复的,多条重复数据查询最新,所以不能再vin上添加唯一索引。

并发环境下mysql插入检查方案(并发环境下,共享资源的正确使用方式是)

解决方案二: 使用mysql事务操作,将检查是否存在和插入作为一个事务进行处理,当检查失败的时候,不进行插入。从网上搜索了一下,大致思路如下:

但是这样实际上还是没有解决并发的问题,这样只是把两个操作变成了一个原子的sql操作,可以用于同时插入两条数据一致性的情况,但并不适合需求。

既然sql层面没有解决问题,就考虑从java的并发编程方向解决。 解决方案三: java解决并发问题,首先想到的是使用内置锁或者可重入锁,基本语法如下: ·内置锁: 由于是在Servlet中进行的处理,因此使用synchronized(this)直接处理业务代码,使得并发情况下,只能有一个线程访问到该段业务代码:

·可重入锁: 相当于更灵活的内置锁,在这里与内置锁基本相同

经过测试,这个方案是可行的,最终没有采用的原因是因为直接使用这种方式加锁,加锁的代码太多,影响效率。

解决方案四: 设置一个查询Map,插入前存储数据,插入后删除数据,代码如下:

这个方案基本满足了业务需求,唯一的问题是要求接口的更新时间要与业务时间错开,否则更新接口会清空vinMap,导致库中数据混乱,出现错误。

标签: 并发环境下,共享资源的正确使用方式是

本文链接地址:https://www.jiuchutong.com/biancheng/319756.html 转载请保留说明!

上一篇:MySQL在右表数据不唯一的情况下使用left join的方法(mysql显示数据库中的表)

下一篇:MYSQL锁表问题的解决方法(mysql锁表机制)

  • 印花税征税对象包括哪些
  • 增值税进项税是多少
  • 销售不动产营业税纳税义务发生时间
  • 9个点的发票跟6个点区别
  • 个人所得税申报是什么意思?
  • 销项税额转出减去还是加上
  • 劳务派遣人员工作单位怎么写
  • 计提房产税计入哪个科目
  • 季度奖需要交税吗
  • 增值税退税什么时候办理
  • 物业公司收取供热管道内网的维护费用合理吗
  • 分配的股息 要交所得税吗
  • 调表不调账最后会有什么问题
  • 建筑设计行业收入调查
  • 诉讼财产保全保险费能否主张
  • 年度所得税汇算清缴表去哪里找
  • 减半征收政策
  • 2021年税控升级最新版本怎么升级
  • 小规模纳税人计提增值税账务处理
  • 四项服务加计扣除政策2023
  • linux系统怎么查看mac地址
  • windows在cmd设置变量
  • windows 安装
  • 华为p50新款
  • 查补以前年度企业所得税的申报处理
  • PHP:bzdecompress()的用法_Bzip2函数
  • 溢价对外投资账务处理
  • 恶搞代码vbs教程
  • 2021前端面试题目100及最佳答案
  • 低值易耗品的三级科目有哪些
  • php数组函数题目
  • nlp工具箱
  • php发送短信
  • vue3微前端
  • 以物易物双方做什么处理
  • 基于骨骼关键点的动作识别
  • php实现文件上传需要使用哪个全局变量
  • php图片代码
  • 前端页面设计
  • php高级程序招聘
  • ls命令的作用
  • 取得抵债资产支付的税费一般不包括下列哪种
  • 中标费用由哪方出
  • 待抵扣进项税额的分录
  • 退税是上一年交的税都会退吗
  • 固定资产包括无形资产吗?
  • 卖固定资产计入
  • 开具红字增值税普通发票
  • 社保当月没扣
  • 企业选择简易征收方案
  • 劳务关系需要交税吗
  • 向银行按揭贷款时,收入流水不够怎么办?
  • 投标保证金支付给谁
  • 公司没有收入怎么办
  • 如何登记现金日记账视频
  • 主营业务利润率反映了企业的什么能力
  • linux i
  • wav文件属于什么文件
  • os x yosemite dp6下载 os x 10.10 dp6官方下载地址
  • rpcclient.exe - rpcclient是什么进程 有什么用
  • win8系统修改密码
  • win8.1拨号上网
  • ssh登录报错
  • win7小技巧
  • win8系统怎样
  • win10系统自带输入法怎么关闭
  • win8怎么连接宽带账号密码
  • cocos2dx用checkbox实现单选框和button实现table按钮
  • css table-cell
  • jquery源码下载
  • angular ngshow
  • Unity3D中Enabled、Destroy与Active的区别
  • node.js的理解
  • python简单gui
  • 轻松实现人生理想生日尾数农历
  • jquery原理和实现步骤
  • 建筑施工税务处理
  • 江苏国税电子税务局怎么登录
  • 广东税务数字化平台官网
  • 镇江市物业管理协会
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设