位置: 编程技术 - 正文

并发环境下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锁表机制)

  • 公司全额承担个税怎么申报
  • 分公司上交总公司营业款如何记账
  • 产值利税率是什么
  • 契税完税凭证是不是契税发票
  • 股东所有者权益公式
  • 接受捐赠的增值税处理
  • 银行转账支付凭证有效期多久
  • 工资表多扣个税怎么做账
  • 资本金利息收入算业务收入吗
  • 职工出差餐费计入什么科目
  • 费用利润率计算公式是什么意思
  • 税务机关办理扣税流程
  • 货样广告品出口需要开票吗
  • 原材料加工费怎么入账的
  • 物业公司收取电费加价依据
  • 银行转贴现业务违法吗
  • 行政单位租个人房子能用收据下账吗
  • 出口退税率为0算免税吗
  • 所得税汇算后要做账吗
  • 自产自销税点
  • 当年的成本发票必须当年结算吗
  • 小规模收入未达50万
  • 建筑业一般纳税人可以开普票吗
  • 免税收入要减去吗
  • PHP:xml_set_external_entity_ref_handler()的用法_XML解析器函数
  • 简要说明php web的工作流程
  • php异常的基类
  • windows 7怎么打开虚拟化
  • 已缴税额比应纳税额多
  • 代开增值税发票沒有付款怎么做账?
  • 贷款和应收款项应采用实际利率法
  • php sse
  • 编程 开发
  • 累计折旧大白话
  • 费用类和成本类有哪些
  • 代垫运杂费计入原材料成本吗
  • 小规模季度必须报税吗
  • 帝国cms采集教程
  • 案例详解:功能点估算法
  • 可转债公允价值评估
  • 自然人独资公司可以变更法人吗
  • 其他应收款增加会计分录
  • 进项加计抵减对账怎么做
  • 个体工商户增值税申报操作流程
  • 进项税大于销项税,不用缴纳增值税
  • 取得虚开普票如何处置
  • 账务处理程序的定义
  • 退教育费附加税怎么申报
  • 固定资产售后回租融资租赁利息可以抵扣进项税额么
  • 退货与销售折让的区别
  • 应收票据背书转让不终止确认如何记账
  • 年报和汇算清缴的顺序
  • 标准成本法计算公式图
  • 餐饮企业的内部营销
  • insert into tbl() select * from tb2中加入多个条件
  • win10预览版21277
  • xp如何把ie浏览器设置为默认浏览器
  • linux cp用法
  • linux操作系统常用操作命令
  • linux 应用程序
  • win8.1技巧
  • linux spool
  • 王牌竞速 小米
  • win8系统没有无线网络连接
  • win10周年版
  • win8怎么打开桌面
  • android属性动画
  • linux启动过程流程图
  • Android UI之LinearLayout(线性布局)
  • 五个常用的视频格式及其特点
  • [置顶]电影名字《收件人不详》
  • python编程基础语法
  • javascript要怎么学
  • jquery实现原理
  • iframe例子
  • 国家税务总局介绍
  • 税务跨区变更需要什么资料
  • 车位过户需要契税发票吗
  • 北京朝阳区国税局
  • 金三是什么鱼竿?
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设