关于数据并发

摘要:
当多个用户同时更新同一数据的时候,由于更新可能导致数据的不一致性,使得程序的业务数据发生错误,这种情况可以称之为并发。保守式并发控制:数据从数据库取出之后,一直处于锁定的状态,其他用户不能获取该数据,直至数据更新完毕之后,用户才能取出该数据进行操作。可能事务属于“保守式并发控制”,更新的时候不检查是否和数据库数据一致,直接更新。

当多个用户同时更新同一数据的时候,由于更新可能导致数据的不一致性,使得程序的业务数据发生错误,这种情况可以称之为并发。在ADO .NET中,并发的处理可以通过三种方式来控制:保守式并发控制、开发式并发控制以及最后更新生效方式。

  • 保守式并发控制:数据从数据库取出之后,一直处于锁定的状态,其他用户不能获取该数据,直至数据更新完毕之后,用户才能取出该数据进行操作。此种控制方式对于性能和资源占用得很多,由于只能同时有一个用户对数据享用操作权,所以可能会在正常业务中,影响其他用户的处理进程。但此控制方式可以完全保证数据的完整性。该方式可以通过.NET提供的事务机制来实现,前提是数据源需要支持事务。
  • 开发式并发控制:数据在更新之前都是可以被其他用户使用的,只有在更新的时候,才锁定记录。但更新的时候,会比对与查询之初的数据是否吻合,如果不一致,则不运行修改。此种控制方式也可以完全保证数据的完整性,其优点是不会占用其他用户访问该数据的权限,其缺点是由于其他用户可能已经更新了这些数据,导致本次更新可能不会完成。对于此种控制方式,多以开发人员通过程序本身的业务逻辑来实现。
  • 最后更新生效方式:此种方式同上,只有在数据更新的时候,其他用户才不可使用,但更新的时候不检查是否与开始数据一致,而直接对其更新。此种方式对于更新的并发性有很大的支持,但缺点是可能引发前后数据的不一致。此种方式适合可以满足此需求的业务场景使用。

注意:数据库的并发处理并不是一成不变的,不同的业务场景对数据库的并发要求是不一样的,可以根据具体情况具体分析

我的问题是,在购物的场景中,购买了一个商品,库存自然会减少。当有多个用户同时对此商品进行操作的时候,怎么解决数据的完整性,比如说库存为1,可是有10个人去购买,当然是第一个可以购买,其他的都会因为库存不足而导致操作失败。怎么做?

有的人说用队列……

我用事务,浅浅地只知道事务可以保持数据完整性。可能事务属于“保守式并发控制”,更新的时候不检查是否和数据库数据一致,直接更新。

测试了一下。发现事务在update、delete、insert的时候,会锁定该表,直至commit才释放。锁定期间不能对该表执行任何操作,访问也不行。

在select的时候则不会锁定。

——真的不知道啊,只能先用事务了,可能高并发的时候会出现一些错误吧。

天啊,一想到这种问题,自己就想滚出编程圈,做个机智的少年。

免责声明:文章转载自《关于数据并发》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇VIM常见用法总结unity实现文本打字机效果(支持富文本)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

expdp/impdp数据泵方式备份还原数据库

1、用sysdba账号登入数据库,然后查询到要更改的用户信息:   SELECT user#,name FROM user$ where user#=110; 2、更改用户名并提交: UPDATE USER$ SET NAME='C##DALIAN' WHERE user#=110; COMMIT; 3、强制刷新: AL...

Insert的一个小应用——复制数据

    越深入的学习,越觉得一种知识的深厚底蕴。   平时使用SQL语言中的Insert的方式是:insert into Table value()。今天使用SQL的Insert语句时。 实现一个功能,复制一条数据,主键不同,数据相同。 举例如下: 1、表结构    环境为Sql Server2008。 2、Code   (1)把Value句换成sele...

Oracle 性能优化 — 统计数据收集

ORACLE优化器的优化方式有两大类,即基于规则的优化方式(Rule-Based Optimization,简称为RBO)和基于代价的优化方式(Cost-Based Optimization,简称为CBO)。 A、 RBO方式:优化器在分析SQL语句时,更据数据库中表和索引等定义信息,遵循的是Oracle内部预定的一些规则。比如我们常见的:当一个wher...

HadoopDB:混合分布式系统

HadoopDB 是一个 Mapreduce 和传统关系型数据库的结合方案,以充分利用 RDBMS 的性能和 Hadoop 的容错、分布特性。2009 年被 Yale 大学教授 Abadi 提出,继而商业化为 Hadapt,据称从 VC 那儿拉到了 10M 刀投资。 本文是对 HadoopDB 论文的总结。其中不免掺杂些自己的不成熟想法,更详细的内容,还...

tcp_tw_recycle参数引发的数据库连接异常

【问题描述】 开发反馈有个应用在后端数据库某次计划性重启后经常会出现数据库连接异常问题,通过监控系统的埋点数据,发现应用连接数据库异常有两类表现:   其一:连接超时   131148.00ms Tomcat Connection Pool   其二:连接耗时过长   DAL.getConnectionCost 64018ms 【问题分析】 通过监控数据汇...

Flink RichSourceFunction应用,读关系型数据(mysql)数据写入关系型数据库(mysql)

1. 写在前面 Flink被誉为第四代大数据计算引擎组件,即可以用作基于离线分布式计算,也可以应用于实时计算。Flink的核心是转化为流进行计算。Flink三个核心:Source,Transformation,Sink。其中Source即为Flink计算的数据源,Transformation即为进行分布式流式计算的算子,也是计算的核心,Sink即为计算后的...