1. CAS
CPU指令 和 程序并发原语中存在 CAS 概念, Compare and Set, 就是修改一个寄存器区域或变量值时,先检查 old value, old value相同再进行修改,否则放弃。
例如:
已知 int a = 1;
引用
非 CAS 赋值为: a = 10;
CAS 赋值为 compareAndSet( 1, 10);
这样,在多线程并发操作时,最终 a 将被原子性的修改,而不会发生冲突的结果。
而数据库的事务中并发冲突的场景与之非常类似,都是对共享资源竞争访问时的突出问题。
2. 基于CAS机制的数据库update操作
由CAS的原理,可以考虑以类似的方式处理数据库的update操作。
假定订单 OD_0100 的总价款为1100 元, 现在要将其修改为 1500 元,
引用
update sale_order set order_amount = 1500.00
where order_id = 'OD_0100'
采用 CAS 机制进行修改,假定已经知道订单修改前的总价款 1100,则update SQL为
引用
update sale_order set order_amount = 1500.00
where order_id = 'OD_0100'
and order_amount = 1100.00
若出现并发冲突,例如:order_amount 已经先其他请求修改为 900, 那么上面的 update 语句的操作结果数为 0; 此时,客户端需要重新查询订单,再尝试第二次修改。 这类似于 CAS 中的自旋。
3. 与其他事务机制比较
数据库事务有悲观锁和乐观锁,乐观锁有一种机制是基于 version 字段来控制并发修改冲突。
与version事务机制类似,CAS事务也是一种细粒度的锁。然而,version 为行级锁,粒度过大; 而 CAS 事务为列级锁,粒度更小。 根据锁机制的一般原则,粒度越小,并发性能越高。
分享到:
相关推荐
本文将详细讲解几种常见的锁机制:悲观锁、乐观锁、共享锁和排他锁,并简要介绍分布式锁以及锁降级原理。 1. **悲观锁**: 悲观锁是一种保守的策略,它假设在读取数据时,数据极有可能被其他线程修改。因此,悲观...
乐观锁和悲观锁是数据库事务控制中的两种重要策略,它们主要用在多用户并发操作同一数据时,以防止数据的不一致性。理解这两种锁的概念、原理以及应用场景对于开发者来说至关重要,尤其是在高并发环境下保证数据的...
- **乐观锁**:基于比较并交换(CAS)的思想,假设并发冲突较少,只有在更新数据时检查是否被其他事务修改,若未修改则更新,否则重试。通常通过增加版本号字段来实现,例如在抢购、秒杀场景中防止超卖。 2. **...
3. **原子性操作:**支持数据的原子性修改,确保数据的一致性和完整性。 4. **数据持久化:**提供两种持久化机制——RDB和AOF,确保数据安全。 5. **主从复制与高可用性:**支持数据备份和高可用部署。 6. **多语言...
8. **分布式事务**:实现跨服务的事务一致性,常用的方法有两阶段提交(2PC)、补偿事务(TCC)、Saga事务等。 9. **负载均衡算法**:如轮询、随机、最少连接等,根据实际应用场景选择合适的负载均衡策略。 10. **...
- **分布式事务**:如两阶段提交、三阶段提交等协议。 - **负载均衡算法**:轮询、随机、最少连接等。 - **Zookeeper**:用于分布式协调服务,实现配置管理、命名服务等功能。 - **数据拆分**:垂直拆分针对功能模块...
- 讲解了事务处理、消息队列等高级特性。 - 分析了企业级应用程序的设计模式。 45. **消息队列(第45章)** - 介绍了消息队列的概念及其在分布式系统中的应用。 - 讨论了如何使用MSMQ进行消息传递。 - 分析了...
Java访问权限控制源代码 1个目标文件 摘要:Java源码,文件操作,权限控制 Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流...
8. **分布式事务实现方案** - **两阶段提交**(2PC):协调者发起准备阶段和提交阶段。 - **三阶段提交**(3PC):增加了预提交阶段。 - **补偿事务**:基于 TCC(Try-Confirm-Cancel)模式。 9. **ZAB协议** -...
- **原理**:分布式处理大量数据集的一种编程模型。 - **流程**:包括Map阶段和Reduce阶段。 - **应用**:广泛应用于大数据处理领域。 #### HDFS - **特点**:适合一次写入多次读取的大文件存储。 - **架构**:...