`
kobexing933
  • 浏览: 120341 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

第二十五章 离线并发与锁机制

阅读更多

第二十五章 离线并发与锁机制

离线并发的来源

Web项目中,离线并发显得尤其严重。例如,用户A和用户B同时修改数据库中的某张表的R行,加入R行有两个字段分别是C1C2

假如按照如下过程修改:

1 用户A将数据RC1,C2)读取到A的浏览器中。

2 用户B将数据RC1,C2)读取到B的浏览器中。

3 用户A在浏览器上将数据修改为RC1’C2),同时更新到数据库。

4 用户B在浏览器上将数据修改为RC1C2’),同时更新到数据库。

上述过程存在两个问题,第一,第4B在修改数据的时候数据库中的数据和B的浏览器中数据已经不一致了;第二,如果程序按照哪个字段变化在数据库中更新哪个字段的方式处理的话,那么经过上述四步修改,数据库中R行的内容是(C1’,C2’),这和A或者B的想法都不同(A认为是(C1’C2),B认为是(C1C2’))。

上述过程中A对数据库的修改过程或者B对数据库的修改过程,都是无法根据数据库的最新内容做修改,所以成为离线。AB同时对记录R进行就该叫离线。

以上的环境叫离线并发。

那么如何解决离线并发过程中遇到的问题呢?我们引入锁机制。

锁机制

锁机制,就是在需要修改的数据上加互斥锁,通过互斥锁避免数据被同时修改。锁机制更具其应用环境又分为乐观锁悲观锁

乐观锁

乐观锁,指认为冲突很少发生,所以只是在数据修改的时候比较修改的基础数据和数据库中的数据是否相同,相同则修改,否则提示用户重新装入数据库中已经变化的数据。

实现方法1:在进行update的时候使用where条件,在Where标间中比较所有上一步中查询得到的数据。如果数据库中的数据没有变化,则update可以更新到内容,否则update语句不能更新到内容,可以根据update的返回值确定更新是否成功。

实现方法2:在每一个表中追加一个特殊字段,类型为timestamp,每次更新的时候比较这个字段的值是否一致,如果一致,则更新,同时将这个字段更新为当前时间,否则,说明数据已经变更。这也可以使用update加上where实现。

悲观锁

悲观锁指,需要修改的数据,在读取的时候就对数据加锁,其他用户在准备修改,读取数据的阶段判断数据是否上锁,以此来决定是否进行修改前的读操作。

实现方法:

通常在数据库中建立一张lock表,该表的字段包括,表明,唯一索引,时间,用户信息等。

在用户读取数据准备修改的时候,首先判断lock表中是否存在自己将要读取的数据。

如果不存在,则在lock表中添加一条记录,记录对那张表的哪行数据进行修改;如果存在,在判断时间字段是否超时。

如果超时,则更新lock表中本条记录的时间字段。(防止死锁的必要手段)

如果存在,也不超时,说明本条记录正在被其他用户修改,则返回并发信息。

分享到:
评论

相关推荐

    C#与.NET3.5高级程序设计高清版(01-23)章

    8. **第二十三章:ADO.NET之二:断开连接层** - 在这个章节中,重点讨论了 disconnected模式的ADO.NET操作,如DataSet,DataTable,以及DataAdapter,这些在离线操作或批量处理数据时非常有用。 9. **第十六章:...

    数据库系统概念第4版(英文版)

    **第二十三章:高级数据类型和新应用** - **多媒体数据**:介绍如何处理图像、音频和视频等多媒体数据。 - **时间序列数据**:适用于处理具有时间戳的数据,如股票市场数据。 - **生物信息学**:研究生物学数据的...

    <21天学通c#>源码2

    《21天学通C#》是一本针对初学者的编程教材,其源码部分涵盖了从第十一章到第二十一章的内容。这十章的源码涵盖了C#编程的许多核心概念和技术,对于想要深入理解C#编程语言的初学者来说,是一个非常宝贵的学习资源。...

    iOS面试题合集

    #### 二十五、大文件离线下载 - **知识点概述**:大文件离线下载涉及分段下载、断点续传等技术。 - **挑战与解决方案**:需要处理网络波动、文件完整性验证等问题。 #### 二十六、Socket连接建立步骤 - **知识点...

    arcgis-runtime-sdk-java-guide-100.4.0

    - 支持冲突解决机制,以处理可能发生的并发编辑问题。 - **关联要素:** - 建立要素之间的关系。 - 可以用来表示现实世界中的关联,如道路和桥梁之间的连接。 #### 九、路由与导航 - **寻找路线:** - 计算从...

    移动应用开发技巧以及入门教程知识点总结.docx

    #### 二十五、社交分享 - **分享功能**: 实现社交媒体分享功能,如通过微信、QQ、微博分享链接或内容,增加应用的曝光度。 #### 二十六、二维码/条形码扫描 - **扫码功能**: 集成二维码/条形码的生成与扫描功能,...

    25_网络通信之资讯客户端

    "25_网络通信之资讯客户端"这个主题聚焦于如何在Android应用中实现资讯的获取与展示,这对于开发新闻应用、博客阅读器或者任何需要实时数据更新的应用至关重要。在这个过程中,我们将探讨几个关键的知识点: 1. **...

    iOS面试题集合(BAT及各大中小型公司)1

    3. **线程安全与并发控制**:iOS开发中常见的锁有NSLock、@synchronized、NSCondition、GCD的串行队列等。苹果推荐使用GCD来管理线程同步,因为其性能较好。atomic属性并不保证线程安全,只是保证基本的读写操作原子...

    java企业面试题

    11. ASP.NET身份验证:Forms、Windows、Passport等,分别基于表单、NTLM/Kerberos、第三方认证。 12. 调用Web Service方法:通过SoapHttpClient或WCF服务代理类。 13. 应用程序域:.NET运行时的隔离单元,受管制的...

    安卓面试题

    锁机制 - **同步锁**:synchronized关键字。 - **互斥锁**:ReentrantLock等。 #### 41. MVC作用 - **分离关注点**:将数据处理、界面展示和用户交互分离。 - **易于维护和扩展**。 #### 42. px、dp、sp单位 - **...

    ADO.NET考核知识点

    2. **第二范式(2NF)**:在满足1NF的基础上,2NF要求表中的非主键属性完全依赖于整个主键,而不仅仅是主键的一部分,避免部分函数依赖。 3. **第三范式(3NF)**:进一步强化2NF,3NF要求非主属性不仅依赖于主键,...

    Job Plus项目是基于SpringBoot+Vue的轻量级定时任务管理系统+源代码+文档说明

    2. 接口友好:同时支持swagger2、knife4j两种可视化接口API调试,支持离线接口文档; 3. 任务管理:支持通过Web页面对任务进行CRUD操作,可视化界面,快速上手; 4. 执行记录:支持通过web页面在线查看调度结果、...

    网易(26问).pdf

    异常捕获一般通过`.then`方法的第二个回调函数或`.catch`方法来实现,以处理Promise中发生的错误。 #### 17. CSS3新增的position属性 CSS3新增的position属性值包括sticky,除此之外还有更多,如initial(将属性...

    hibernate 框架详解

    第二部分 - 关联映射 2.3.1. 映射Person类 2.3.2. 一个单向的Set-based关联 2.3.3. 使关联工作 2.3.4. 值类型的集合 2.3.5. 双向关联 2.3.6. 使双向关联工作 2.4. 总结 3. 体系结构(Architecture) ...

    Professional Visual Studio 2010

    #### 二、章节详解 **1. 引言** - **内容概述**:介绍Visual Studio 2010的新特性及其对开发流程的影响。 - **知识点**: - Visual Studio 2010的新特性。 - IDE的改进之处。 - 支持的语言和技术更新。 **2. ...

    hibernate3.04中文文档.chm

    2.3. 第二部分 - 关联映射 2.3.1. 映射Person类 2.3.2. 一个单向的Set-based关联 2.3.3. 使关联工作 2.3.4. 值类型的集合 2.3.5. 双向关联 2.3.6. 使双向关联工作 2.4. 总结 3. 体系结构...

    Hibernate教程

    2.3. 第二部分 - 关联映射 2.3.1. 映射Person类 2.3.2. 一个单向的Set-based关联 2.3.3. 使关联工作 2.3.4. 值类型的集合 2.3.5. 双向关联 2.3.6. 使双向关联工作 2.4. 总结 3. 体系结构(Architecture) ...

Global site tag (gtag.js) - Google Analytics