首页 > 数据库 >数据库并发处理方法

数据库并发处理方法

时间:2022-12-05 10:33:14浏览次数:41  
标签:10 出票 处理 数据库 订票 查询 并发 表中


1、如果仅仅考虑技术问题,那么肯定会得出最坏的解答,因为技术是没有智能的、最笨的东西,只有先用智能后用技术才能解决问题。
  
  “查询-订票-收款-出票”是一个事务不假,但是它并不是一个1、2秒钟的数据库操作事务,而是一个持续较长时间(例如超过10秒钟)的业务。试想一下,如果一个终端在处理一张车票的时候所有其它几百的终端都被阻塞——“死机”——在这里了,或者幻读、赃读的终端每处理10次票仅能成功1次,而其它9次都会在操作员操作最后一步才出现提示“记录已经被修改,您的操作被回滚放弃,请重新执行订票流程”,这是多么让人懊恼的恶劣设计呀!
  
  其实流程很简单,就是在订票开始就将票从“无人订购”表移到一个“正在处理”的表中。订票点的操作,收款、出票等,都是针对“正在处理”表中具体的票资源的操作,并不去动别人正在处理的票。订票点可以放弃处理从而把票放回“无人订购”的表中,也有可能后台会在超时(例如2分钟)之后自动处理这个。
  
  事务锁不是一个业务处理的概念,而是一个处理软件编码的后期细节的技术。如果大家都把高级的业务流程当成低级的计算机技术来看待,会给用户带来无尽的烦恼,会产生大量成事不足的“错误地技术化了”的解决方案。

 

 

提供的解决办法还有一点问题,将“无人订购”表移到“正在处理”的表时机如何掌握。如果是查询时移动,到底要移走多少张票(我们买票时都是先只告知车次,售票点查询之后再问我们要几张票),如果全数移入“正在处理”的表,那此时别的地方查询时就只能显示车次的票售完;如果是先查询,在出票时才移动,票可能已经被别的地方售出了,购买会失败。

2、DbCommandBuilder中
  public enum ConflictOption
  该枚举
  CompareRowVersion
  如果表中存在任何 Timestamp 列,则这些列在 WHERE 子句中用于所有生成的更新语句。这等效于指定 CompareRowVersionUpdate | CompareRowVersionDelete。
  
  
  net2.0中使用DbDataAdapter更新数据库。套用DbCommandBuilder自动生成的sql语句,where部分卡的很严格的,基本字段都要在where后面卡一下。如果有高精度的字段存在,可以防止并发。

 

3、事实上火车票的售票系统肯定是不会简单的用事务来避免并发的。
  
  可以为每一个售票窗口预留一些车票,如10张,售一张就请求一张未售的票加入预留队列,但未售的车票达到某个临界值时,如20张,就开始按照各个售票窗口的出货情况和缺货情况来分配

标签:10,出票,处理,数据库,订票,查询,并发,表中
From: https://blog.51cto.com/u_11295556/5911480

相关文章

  • 批处理执行SQL备份
    建立mybackup.bat,输入以下内容直接运行该脚本,即可开始自动备份数据库也可把该脚本加入windows任务计划里执行-------------------------------------------------------......
  • spring mvc3及mvc 3.2中的异常处理小结
    在springmvc3中,处理异常的是试用exceptionresolver去做异常,先来个简单DEMO看下:1)自定义异常类publicclassSpringExceptionextendsRuntime......
  • jaxb中对java.util.Date的处理
    JAXB是个好东西,转换JAVAOBJECT到XML的,最近发现JAXB中对java.util.Date的转换有些要注意的地方,笔记之。比如有一个POJO如下:importjava.util.Date;p......
  • 非关系型数据库redis部署及优化
    一,关系型数据库与非关系型数据库1.关系型数据库一个结构化的数据库,创建在关系模型(二维表格模型)基础上,一般面向于记录SQL语句(标准数据查询语言)就是一种基于关系型数据......
  • 批处理及有状态等应用类型在 K8S 上应该如何配置?
    众所周知,Kubernetes(K8S)更适合运行无状态应用,但是除了无状态应用.我们还会有很多其他应用类型,如:有状态应用,批处理,监控代理(每台主机上都得跑),更复杂的应用......
  • WGCLOUD 的基本知识 - agent自动识别的IP不准确,如何处理
    部署完成WGCLOUD监控平台后,当agent自动获取主机IP不准确时,如何手动配置agent主机IP说明有时候agent自动获取的主机IP不一定准确,这时可以手动配置下agent主机IP,手动配置后......
  • Go语言的 串行处理 和 并行处理 有什么区别 ?
     原创 学习与分享 Go语言圈 2022-12-0508:30 发表于广东收录于合集#为什么要学Go语言141个学习与交流:Go语言技术微信群商务合作加微信:LetsFenggoland全家桶激......
  • 【图像处理笔记】总目录
    1图像增强1.1图像增强 2形态学2.1 二值图像形态学2.2 灰度级形态学2.3 形态学重建 3图像分割3.1 图像分割之基于灰度不连续性的分割方法......
  • 导入hellodb.sql生成数据库 ,完成下列操作
    导入hellodb.sql生成数据库,完成下列操作目录导入hellodb.sql生成数据库,完成下列操作导入hellodb.sql查询1.在students表中,查询年龄大于25岁,且为男性的同学的名字和年龄......
  • Stream流处理介绍以及Stream的基本操作
    Stream(流)是一个来自数据源的元素队列,元素是特定类型的对象,形成一个队列。Java中的Stream并不会存储元素,而是按需计算。数据源:流的来源,可以是集合,数组等。和以前的Collec......