`

关于Web应用中的数据库的并发性的一个解决方案(转载)

阅读更多

我先把流程说出来,,比如修改一个记录:
当用户点修改时,从数据库读出数据并显示到编辑菜单中,然后再编辑数据,再点确定保存到数据库中。如果多个用户,当A用户点修改到保存该数据这一时间段,,B用户不能修改,,这个好像不能用事务来做吧,,,大家给个解决方案,,但是我觉得还有点矛盾。当这一时间段用户能修改,那么对于A用户来说数据就已经不一致了,A用户看到的是B用户没有修改前的数据,如果不能修改,也不现实,,如果B用户点了修改还没点确定,,然后用户出去办急事或WC,,那A用户不是一直等,,,
网上经常举卖车票的例子,当售票员A听到买票人后开始查询,发现有2张,,买票人正好要2张,,在查询和售出这一时间段,如果其它窗口不能卖,,好像不太现实,,有时这一时间段还是很长的,,一分钟左右吧,,其它10多个窗口窗口不能卖这一车次的不是很要命,并且每个窗口都会差不多占一车次的查询,,如果在查询到确定出售这一价段其它窗口可以卖,,也出现问题了,,售票员A查询发现剩两张,,告诉买票的人,正好剩两张,,这时客户确定要,如果在这一时间段,其它窗口卖一张,,那在确定卖出去时将会失败,难道要跟买票人解释。,,这问题其它也困我很久了,,谢谢大家给我一个解决方案,,也许是我想错了,,在线等

 

 

 

看来LZ没有做过实际案例啊,现在我给你透露下实际售票系统中的一个方案例子:

  首先没有那么复杂的锁,实际应用会尽量从业务角度考虑避免冲突:

  实际售票系统是这样: 
 
  1.售票中,"座位号" 才是竞争资源;
  2.售票中,查看票是不发生锁号的.
  3.售票中,有个选票(选座位号)的动作,选座位号确定时,才发生锁号(即锁住改作为号,即使这锁号,也只是修改标记,表示自己暂时锁住);
  4.等客户交钱后,就确定提交交易完成,这时候,就成为售出该票了(当然,被锁的号,要修改为对应的已售标记,及其他流程操作).

从这个过程看,几乎没有那么多冲突出现(只有选号时,有可能已被别人选了,这也应该知道的,可以另选号),这就是方案.

 

 

引用 7 楼 xjlqlqlq 的回复:
看来LZ没有做过实际案例啊,现在我给你透露下实际售票系统中的一个方案例子:

首先没有那么复杂的锁,实际应用会尽量从业务角度考虑避免冲突:

实际售票系统是这样:

1.售票中,"座位号" 才是竞争资源;
2.售票中,查看票是不发生锁号的.
3.售票中,有个选票(选座位号)的动作,选座位号确定时,才发生锁号(即锁住改作为号,即使这锁号,也只是修改标记,表示自己暂时锁住);
4.等…



关键是第三步。我理解买票的时候虽然外面只是一个买入键的敲击动作,但后台应该是分为1、锁定当前记录,2、锁定成功后修改该票属性 两个动作的。只有第一个动作成功,才能做第二个动作。
我倾向于不是用SQL语句来锁住某行,而是在该行有某字段,修改成功就表示锁定。锁表对性能有影响。

 

 

我也觉得应该是第三步,,但我细节我不赞成,,我认为,选票时,锁定该记录(不一定非要用锁,可以加一个字段锁定,此时将它改为锁定状态,)当客户交钱提交交易完成 时,再改该记录的已售状态,当取消交易时,,再把锁定改为非锁定状态,,,不知道理解对没

 

 

"如果不用锁,,去改锁定字段时,好像也有问题,,当去修改锁定字段为锁定状态时,,此时要是机了重启了,,那不是一直在锁定"


说的没错,既然是两阶段提交,自然有可能发生意外在中间过程中,

象你说的中途死机了,这个需要解决的,实际中当然会考虑周全的,有另外解决之道.
所以说,这是个工程,有系列问题要解决. 


如果是死机,可以有方案解决(这个可以自己考虑,各公司可能策略不同),简单的方法是, 客户端有缓存日志记录,如果死机,启动的时候,自然会知道上次未完成的事情; 当然,如果有好方案也可以在后台来解决.总之这个就很多途径.

 

转载:http://topic.csdn.net/u/20090520/10/d2eac176-afca-4321-9384-45d82a6f010b.html?68881

分享到:
评论

相关推荐

    高并发-高负载数据库解决方案(也有针对SQL)

    接着,面对大量读操作的场景,如博客、论坛或CMS系统,数据库主从部署是一个有效的解决方案。主从复制使得写操作集中在主数据库,读操作分散到从数据库,实现读写分离。MySQL的主从复制依赖于主服务器的二进制日志,...

    Web数据库技术实用教程

    本教程将带你走进这一领域的核心知识,让你能够构建高效、安全且用户友好的Web数据库应用。 一、Web数据库技术基础 1. HTML与SQL:HTML是创建网页的基础语言,而SQL则是与数据库交互的语言。理解这两者的关系对于...

    高并发数据库解决方案.pdf

    这种方式通过一个磁盘阵列为多个数据库实例提供服务,共享物理资源,显著提升了负载能力,适用于大多数常规Web应用。 然而,对于用户量更大、读写操作频繁的大型应用,如博客、论坛或CMS系统,主从部署方式成为首选...

    MVC模式下数据库连接池的Web应用方案

    为了解决上述问题,引入数据库连接池技术成为了一个可行的解决方案。连接池技术的核心在于减少数据库连接的频繁建立与断开,从而提高系统的整体性能。 ##### 2.1 数据库连接池如何提高连接效率 数据库连接池是一种...

    sqlserver数据库大型应用解决方案

    在应对大型应用的数据库解决方案中,SQLServer提供了负载均衡和读写分离等策略,以适应高并发和大数据量的需求。通过合理利用这些技术,不仅可以提升系统的稳定性和响应速度,还能确保数据的一致性和安全性。然而,...

    数据库并发操作

    在多用户环境中,比如Web应用程序或企业级系统,多个用户可能同时请求读取或修改同一份数据库资源,这时就需要有效的并发控制策略来确保数据的一致性和完整性。本讲座将深入探讨数据库并发操作中的关键概念、挑战...

    JavaWeb并发编程与高并发解决方案.docx

    通过以上内容的详细介绍,我们可以看到,在JavaWeb并发编程与高并发解决方案的设计过程中,不仅需要深入理解并发的基本概念,还需要掌握一系列的技术栈和工具,并且了解底层硬件的运作原理,这样才能构建出高效稳定...

    高并发-高负载数据库解决方案(也有针对SQL).pdf

    在构建高并发、高负载的数据库解决方案时,随着WEB网站规模的增长,数据库面临的访问压力也随之增加。为了应对这种挑战,数据库架构需要逐步扩展,以确保系统的稳定性和性能。以下是几个关键的扩展步骤: 1. 单一...

    数据库技术在Web中的应用.docx

    随着Web技术的进步,数据库技术也在不断发展,包括NoSQL数据库、云数据库等新型解决方案,进一步提升了Web应用的性能和可扩展性。 总的来说,数据库技术在Web中的应用不仅是信息存储的关键,也是实现高效数据共享、...

    腾讯云分布式数据库解决方案

    腾讯云分布式数据库解决方案提供了深入的信息和技术细节,着重介绍了腾讯云分布式数据库DCDB的发展历史、架构、功能、优势和应用场景,同时也强调了产品相关的安全和资质。以下是对这些内容的详细解读: 一、分布式...

    高并发web架构完整1

    《高并发Web架构完整1》是一份关于优化和构建高性能Web站点的综合资源,共分为五个部分。在当今互联网行业中,随着用户数量的急剧增长...对于希望提升Web应用性能、应对高并发挑战的开发者来说,这是一个宝贵的资源库。

    Sharding-JDBC是一个开源的分布式数据库中间件解决方案

    Sharding-JDBC是Java开发领域中的一个核心工具,它是一个开源的分布式数据库中间件解决方案,致力于解决大数据量下的高性能和高可用性问题。这个中间件的设计理念是在JDBC层进行扩展,无需改变原有的业务代码,即可...

    利用Java开发高性能、高并发Web应用

    在Java开发领域,构建高性能、高并发的Web应用是一项核心任务。这涉及到多个技术层面的综合运用,包括但不限于系统架构设计、线程管理、数据访问优化、缓存策略、负载均衡以及性能监控等。以下是一些关键的知识点,...

    手把手让你实现开源企业级web高并发解决方案

    《手把手教你实现开源企业级Web高并发解决方案》是一篇详细介绍如何构建高性能、高可用性的Web服务架构的文章。本文将采用lvs+heartbeat+varnish+nginx+eAccelerator+memcached这一组合,来实现一个能够处理大规模...

    sqlserver数据库大型应用解决方案经验总结.docx

    在面对大型应用中sqlserver数据库的挑战时,主要的问题在于如何处理海量数据的存储和访问,以及如何保证系统的稳定性和扩展性。本文主要探讨了两种解决方案:负载均衡技术和数据库的读写分离。 首先,负载均衡技术...

    Java系统的高并发解决方法详解

    在面对大量用户访问、高并发请求方面,基本的解决方案集中在这样几个环节:使用高性能的服务器、高性能的数据库、高效率的编程语言、还有高性能的Web容器。但是除了这几个方面,还没法根本解决大型网站面临的高负载...

    MySQL 数据库如何解决高并发问题

    MySQL 数据库在面对高并发场景时,需要采取一系列优化措施以确保系统稳定性和性能。以下是一些关键的优化策略: 1. **短距离**:优化数据传输路径,减少数据库访问延迟。 - **页面静态化**:对于不常变化的页面,...

    大型高并发 web 应用系统架构

    文章首先讨论外网中在全国范围使用的镜像网站,CDN 内容分 发网络等加速技术,其次着重对本地服务器内网中集群分布,分层处理进行详细分析,包括 硬件解决方案和软件解决方案的交换负载均衡技术,基于磁盘缓存模式和...

Global site tag (gtag.js) - Google Analytics