Skip to content

Commit

Permalink
add readme
Browse files Browse the repository at this point in the history
  • Loading branch information
hongshanru committed May 22, 2023
1 parent 681bd5c commit bf3bee4
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 3 deletions.
2 changes: 2 additions & 0 deletions src/main/java/com/other/DISTRIBUTED_SYSTEM.md
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,8 @@ TCC 在业务执行时只操作预留资源,几乎不会涉及锁和资源的

**TCC 落地实现的开源框架主要有 ByteTCC、TCC-transaction、Himly、Seata TCC 模式等。**

- [TCC 幂等、空回滚、悬挂问题解决方案](https://seata.io/zh-cn/blog/seata-tcc-fence.html)

#### SAGA事务
在分布式事务中,若存在与外部交互的系统,那么就不可能使用TCC的冻结或预留等Try阶段操作。\
SAGA事务是一个分布式环境中的大事务分解为一系列本地事务的设计模式。
Expand Down
6 changes: 3 additions & 3 deletions src/main/java/com/other/MYSQL.md
Original file line number Diff line number Diff line change
Expand Up @@ -671,16 +671,16 @@ InnoDB引入新的锁,也就是间隙锁(Gap Lock)。在一行行扫描的过
## 事务
事务ACID:
- A(Atomicity): 原子性。原子性是指事务是一个不可分割的工作单位,事务中操作要么都发生,要么都不发生
- A(Atomicity): 原子性。事务被视为一个不可分割的操作单元,要么全部执行成功,要么全部不执行。如果事务中的任何一个操作失败,那么整个事务会被回滚到事务开始前的状态,保持数据的一致性
- C(Consistency): 一致性。数据库总是从一个一致性的状态转移到另一个一致性的状态。**不存在可感知的中间状态**。**事务执行结束后,数据库的完整性约束没有被破坏,事务执行的前后顺序都是合法数据状态。** 例如转账业务中,无论事务是否成功,转账者和收款人的总额应该是不变的。
- I(Isolation): 隔离性。事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务所干扰,多个并发事务之间要相互隔离。保证事务执行尽可能不受其他事务影响;InnoDB默认的隔离级别是RR,RR的实现主要基于锁机制、数据的隐藏列、undo log和类next-key lock机制
- D(Durability): 持久性。持久性是指一个事务一旦被提交,它对数据库中的**数据改变是永久性**的,接下来即使数据库发生故障也不应该对其有任何影响。
> 从本质上来说,原子性、隔离性、持久性,最终目的都是为了保证一致性。即一致性是最终目标,原子性、隔离性、持久性可以说都是为了实现这一目标的手段。
MySQL中有undo log(用于回滚)和redo log(用于数据写入)
- 事务的原子性是通过undo log来实现的。undo log记录的都是执行数据变更操作的逆向操作,在进行回滚的操作时候,可以从undo log文件中读取出来,然后执行,就可以将数据恢复回来。
- 事务的隔离性是通过(读写锁+MVCC)来实现的。
- 事务的持久性性是通过redo log来实现的。事务提交写log,更新到内存。通过日志保证了类似与持久到磁盘一样的效果。
- 事务的隔离性是通过(读写锁+MVCC)来实现的。通过实现行级锁(row-level locking)和多版本并发控制(Multi-Version Concurrency Control,MVCC),InnoDB能够在并发事务之间提供适当的隔离性,防止数据不一致问题的发生。
- 事务的持久性性是通过redo log来实现的。事务提交写log,更新到内存。通过日志保证了类似与持久到磁盘一样的效果。InnoDB引擎使用了写日志(write-ahead logging)的机制来保证事务的持久性。在事务提交之前,相关的修改操作会被写入事务日志,并在事务提交后才将其应用到数据库中,以确保即使在系统故障或崩溃时,已提交的事务修改也能够恢复和持久保存
- 事务的一致性,mysql中事务的原子提交,并持久化到内存,事务执行相互隔离,共同保障了事务的一致性。
Expand Down

0 comments on commit bf3bee4

Please sign in to comment.