Delta Lake(deltalake)如何保证ACID交易?

How does Delta Lake (deltalake) guarantee ACID transactions?

Delta Lake使用什么机制保证用户在DeltaTable上操作发起的事务的原子性、一致性、隔离性和持久性?

0。 DeltaLog

Deltalog = Delta Lake 的事务日志。

deltalog 是有序 json 文件的集合。它充当单一事实来源,让用户可以访问 DeltaTable 状态的最新版本。

1。原子性

  • Delta Lake 将用户执行的每个操作分解为 提交,它们本身由 actions.
  • 提交只有在其每个操作成功完成后才会记录在增量日志中(否则它会被还原并重新启动或引发错误),确保其原子性

2。一致性

DeltaTable一致性 由其强大的模式检查保证。

3。隔离

管理并发提交以确保它们隔离。应用乐观并发控制:

  • 提交执行开始时,线程会为当前增量日志创建快照。
  • 提交操作完成后,线程检查 Deltalog 是否同时被另一个更新:
    • 如果不是,它会在增量日志中记录提交
    • 否则它会更新其 DeltaTable 视图并再次尝试注册提交,如果需要的话,在重新处理步骤之后。

4。耐久度

包含改变 DeltaTable 数据的操作的提交需要在基础 Parquet 文件(存储在文件系统中)上完成它们的 writes/deletions被视为成功完成,使它们 耐用.


进一步阅读:

Diving Into Delta Lake: Unpacking The Transaction Log

ACID properties