Delta Lake 对读写请求提供了 ACID 的事务保证。
- 如果有多个并发写,即使来自不同的集群,会保证一致性,这些写入会串行写入,类似mysql中的串行化的隔离级别
- 读操作一旦启动,会保证看到的是 table 的某个 snapshot,保证了读的一致性,即使在读取过程中数据有变动,读操作看到也是读操作开始一瞬间的 table 的一个 snapshot, 读操作看到的数据集不会变动。
Optimistic concurrency control
Delta 使用乐观锁 optimistic concurrency control , 来保证事务,写操作分为3个阶段
1 Read: 读取最新版本的数据,作为一个数据集的一个 snapshot, 然后定位需要改变的文件
2 Write : 在上一步read 操作checkout 出来的版本上写入新数据
3 Validate and commit : 在提交之前,检测是不是有其他以及提交的操作变动的文件,和本事务变动的文件有冲突,如果没有冲突,本次staged 的changes 就提交,产生一个新的数据集版本,如果有冲突,就会抛出一个并发修改异常,放弃修改。R
Delta 乐观锁并发事务控制 Delta Concurrency Control-spark技术分享 http://togelsingapuraku.com