文档核心概念事务模型 (Transaction Model)

事务模型(Transaction Model)

快速概览

Loro 的事务并非数据库中的 ACID 事务。 它们用于打包操作并控制事件触发。

核心概念

  • 目的:把相关操作打包,并控制事件何时触发
  • 不提供回滚:操作失败不会撤销之前的变更
  • 事件批处理:一次事务中的所有操作对应一条事件
  • 历史分组:操作在撤销 / 重做时保持在一起

基本用法

const  = new ();
 
// 未使用事务——会产生多条事件
const  = .("text");
.(0, "Hello");
.(); // 触发事件
.(5, " World");
.(); // 再触发一次事件

事务的运行机制

待提交的操作

本地操作默认处于 pending 状态,在提交前不会触发事件:

const  = new ();
const  = .("text");
 
// 操作处于 pending 状态,暂未触发事件
.(0, "Hello");
 
// 显式提交后触发事件
.();

隐式提交

某些操作会自动触发隐式提交:

const  = new ();
const  = .("text");
 
.(0, "Hello"); // Pending 操作
 
// 以下操作会触发隐式提交:
.(); // 在导入前隐式提交
// 或
.(.()); // 在 checkout 前隐式提交
// 或
.({ : "update" }); // 在导出前隐式提交

事务的保证

  • 所有操作共享同一个时间戳(若启用)
  • 操作会被归入同一个 Change
  • 事务完成后只触发一次事件
  • 操作在事务末尾一并提交
  • 在提交之前,本地编辑不会同步给其他节点

相关文档