本文基于lance v13.0.0版本的官方文档与源码;实验特性的行为和默认配置可能随版本变化。
Lance 的 Stable Row ID:原理、用途与维护成本
在 Lance 中,stable_row_ids指“稳定行 ID”。它的核心作用是让一行数据拥有独立于物理位置的逻辑身份。
需要先区分两个概念:行 ID 稳定,不代表这个特性已经正式稳定。截至本文核对时,Stable Row IDs 仍属于实验特性,默认是关闭的,lance社区推进其生产可用的项目仍在进行。
1. 为什么需要稳定行 ID?
Lance 将数据组织成 fragments。一行数据的物理地址由 fragment ID 和 fragment 内的行偏移组成:
row_address = (fragment_id << 32) | local_row_offset例如:
fragment 3,第 10 行这个地址可以快速定位数据,但它会随着数据布局变化而改变。
例如执行 compaction,将多个小文件合并成较大的文件后,同一行可能移动到: