SuperAPI AI 工具集

cdc

通用与其它

查看项目

更新于 10-15 23:41

技能介绍

用途:CDC(Change Data Capture)跟踪数据库表上的 INSERT/UPDATE/DELETE 变更,把变更记录写入专用 CDC 表(默认 turso_cdc)。它按连接启用,通过 PRAGMA 控制,工作在字节码生成(translate)层;同步引擎消费这些记录,将本地变更推送到远端。

主要能力:支持四种捕获模式——Id(仅 rowid)、Before(前像)、After(后像)、Full(前像+后像+updates)。CDC 表有 v1 与 v2 两个 schema 版本,当前为 v2,新增 change_txn_id 列用于按事务分组,并新增 change_type=2 的 COMMIT 记录标记事务边界。变更类型:1=INSERT、0=UPDATE、-1=DELETE、2=COMMIT。before/after/updates 使用 SQLite MakeRecord 二进制格式。CDC 表与版本表 turso_cdc_version 的自身变更不会被捕获;DDL 作为 sqlite_schema 的变更被记录。

使用方式:通过 PRAGMA 启用/禁用,参数格式为 "<mode>[,<table_name>]","off" 表示关闭;读取该 PRAGMA 返回 mode、table、version 三列。CDC 与 MVCC 互斥。设置 PRAGMA 时发出 InitCdcVersion 操作码,在执行期完成建表、版本跟踪与状态变更;连接状态延迟到事务提交成功后才应用,保证原子性。同步引擎侧通过 DatabaseTape 读取 CDC 表,需先调用 connect() 再 iterate_changes()。

适用场景:需要把本地数据库变更同步到远端、或需要按事务回放/回滚变更的场景。

限制:视图、触发器与子查询不产生 CDC;CDC 与 MVCC 不能同时启用;回放生成器要求 updates 列已填充(full 模式);v1 表通过建表前检测表是否存在来识别,并写入版本表。测试可用 cargo test -- test_cdc 或 cargo test -p turso_sync_engine -- database_tape。其余细节暂未提供。