有c/s b/s的2个项目,操作同一表结构A,表A中有字段count=100
其中
c/s的操作if(count>0){
count=count-100
insertData();
}
b/s的操作if(count>0){
count=count-100
insertData();
}
假设一种可能,c/s和b/s的同时通过验证if(count>0),这样会出现一种情况,count是脏数据了,这是不允许的。
这该如何解决?
有c/s b/s的2个项目,操作同一表结构A,表A中有字段count=100
其中
c/s的操作if(count>0){
count=count-100
insertData();
}
b/s的操作if(count>0){
count=count-100
insertData();
}
假设一种可能,c/s和b/s的同时通过验证if(count>0),这样会出现一种情况,count是脏数据了,这是不允许的。
这该如何解决?
如果对数据库的访问服务是有多台机器的(不同的服务,或者服务部署了集群模式),可以采用如下几种方式之一:
1. 使用程序的方式申请一个全局锁,比如使用Zookeeper就可以实现一个全局锁的功能,获得该锁的授权以后才能继续执行,这样保证对count的计算和insert都是串行执行的,不会存在脏数据;
2. 使用某一个表的一条记录作为行锁(insert本身是无法加行锁的,因为insert之前数据还不存在),比如创建一个名为GLOBAL_LOCK的表,其中只有一条记录(假定有id这样一个字段,记录为id=1),操作之前做:
select id from GLOBAL_LOCK where id=1 for update;
这样也可以保证几个数据库事务本身是串行执行的;
3. 操作之前锁整个表,这个和具体数据库有关
以上两种方式都是基于全局锁的方式,效率比较低,在并发比较高的情况下慎用。
题主的业务逻辑不清楚,如果是需要提高一些效率的话可能需要做一些缓冲的处理,不过要因具体的业务而定。
看你用什么数据库了
Oracle有Select for update
SqlServer有Ulock
基本都是在事务中给数据加锁,在事务结束时候解锁。
思路就是在一个事务开始的时候,把可能更新的数据锁上,
另一个事务想读这个数据就要等待第一个事务解锁才行。
这是悲观锁,后面的事务要等待。
乐观锁就是给数据加个版本号的字段,等更新的时候检查版本号是不是自己当初查出来的版本号,如果不是就报错,或者重来。这种情况不等待,但是需要报错或者重来。
相关推荐
一致性哈希(Consistent Hashing)是一种...总之,这个一致性哈希的Java实现是分布式系统中解决动态扩展和负载均衡问题的重要工具,通过理解其原理和实现细节,我们可以更好地优化分布式环境中的数据存储和访问效率。
java JVM 硬件层数据一致性 JMM
在Java中,数据一致性尤其体现在多线程环境下的共享变量操作。强一致性与弱一致性是两个重要的概念,它们描述了系统如何处理并发更新后的数据可见性。 强一致性是指无论何时,只要读取某个数据,都能获取到最新写入...
在微服务架构中,数据一致性是一个至关重要的议题。随着企业转向微服务以提高敏捷性和可扩展性,如何在分布式系统中保持数据的一致性成为了一个挑战。本文将深入探讨微服务架构下的数据一致性概念,以及相关的设计...
系统需要处理并发更新和冲突检测,确保数据一致性。当同步过程中出现错误,如网络中断或数据库异常,应有重试和回滚机制。 7. **安全性与权限**: 确保数据传输的安全性,可能需要使用SSL/TLS加密,并对访问...
数据库数据一致性是确保数据在不同时间点和不同系统中保持准确和一致的关键要素,它关系到数据的准确性、可信赖度和可用性。实现数据一致性涉及多种策略和实践,如ACID属性、约束、触发器、存储过程和事务。以下是...
数据字典在软件开发中扮演着关键角色,它有助于提高代码的可读性、可维护性和数据一致性。以下是一些与Java中数据字典相关的知识点: 1. **类和对象**:Java是面向对象的语言,数据字典的概念可以映射到类的设计上...
在IT行业中,数据库同步是一个关键话题,特别是在分布式系统和企业级应用中,多个数据库的同步是确保数据一致性、完整性和高可用性的重要手段。本文将深入探讨如何使用Java来实现多个数据库之间的数据同步。 首先,...
在文件名为“distribute-mysql”的压缩包中,可能包含了关于如何在Java环境中利用一致性哈希实现在MySQL分布式环境中的数据插入、查询以及优化等方面的代码示例和指南。通过对这些资源的深入学习和实践,可以更好地...
在Java系列中,保证缓存与数据库数据一致性的探讨一直是一个重要的议题。随着互联网技术的发展和微服务架构的普及,这一问题越来越引起开发者的关注。在涉及到数据一致性的场景中,如何确保数据的一致性和系统的高...
编程语言+JAVAspring+事务管理+数据一致性**:这是一个关于JAVAspring编程语言的事务管理的数据一致性的资源,适合有一定JAVAspring基础的开发者。它介绍了JAVAspring的事务管理的概念、原理和作用,以及如何使用...
一致性哈希算法(Consistent Hashing)是一种在分布式系统中平衡数据分布的策略,尤其适用于缓存服务如Memcached或Redis。它的核心思想是通过哈希函数将对象映射到一个固定大小的环形空间中,然后将服务器也映射到这个...
Java数据生成统计图表程序是一种利用...综上所述,"Java数据生成统计图表程序"是一个综合性的项目,涵盖了数据处理、图形绘制和用户交互等多个方面,对于学习和实践Java编程,特别是数据可视化,是非常有价值的实例。
Java 数据类型和 MySql 数据类型对应表 ...了解 Java 数据类型和 MySql 数据类型的对应关系是非常重要的,这可以帮助我们正确地将 Java 对象映射到 MySql 数据库表中,并确保数据的一致性和正确性。
注意处理可能出现的并发问题,比如确保数据的一致性和避免重复插入。 6. **异常处理和日志记录**:在整个过程中,确保对可能出现的异常进行妥善处理,比如数据库连接失败、SQL执行错误等。同时,记录详细的日志信息...
- **事务管理**:确保在执行批量插入前开启事务,在成功插入所有数据后提交事务,或者在发生错误时回滚事务,以保持数据的一致性。 - **异常处理**:在批量插入过程中,应妥善处理可能出现的任何异常,例如数据库...
此外,需要注意的是,多线程环境下可能存在竞态条件、死锁等问题,需要合理使用`synchronized`关键字或`Lock`接口来保证数据的一致性和安全性。另外,适当的错误处理和日志记录也是必不可少的,以确保程序的健壮性。...
### SAP ABAP与JAVA之间通过RFC传递数据实例详解 #### 需求概述 本文档主要介绍了如何...此外,本案例还强调了在开发过程中需要注意的一些细节问题,如编码一致性、异常处理等,这些都是保证系统稳定运行的关键因素。
在IT行业中,数据库同步是一个常见的需求,特别是在分布式系统或者高可用架构中,为了保证数据的一致性和完整性,通常需要将一个数据库(主库)的数据实时或定时地复制到另一个数据库(从库)。在这个场景中,Java...