Z-set 增量 Join Demo
对应文章:【数据库研究前沿】流批一体与增量视图 第五节。
用纯 Python 标准库(无第三方依赖)演示 DBSP 论文里”双线性算子增量公式”的最小实现:
Δ(a ⋈ b) = Δa ⋈ b_old + a_old ⋈ Δb + Δa ⋈ Δb
运行
python3 zset_ivm.py预期输出最后一行:
[ok] incremental join matches full recompute over 10000 random rounds
依赖
- Python 3.8+
- 仅标准库(
random、typing、collections)
文件
zset_ivm.py:Z-set 定义、加法、双线性 join、增量 join,以及一个随机化 sanity-check。
我们在这里学到什么
- Z-set 上的 “撤回” 不是特殊情况,而是负重数的加法。
- 双线性公式的三项都不能省:
Δa ⋈ Δb看似小项,但它保证两边同时变化时结果正确。 - 一个视图的增量维护在代数上是几行公式;工程上贵的是状态的索引结构、并行 shuffle 与 checkpoint。这是 Materialize / RisingWave / Feldera 真正的差异所在。