在 TiDB 的分布式架构中,我们都知道使用 AUTO_RANDOM (或雪花算法)作为聚簇索引可以有效避免写入热点。然而,随着 TiDB 引入向量检索以支持 RAG(检索增强生成)架构,非单调递增的主键(如 AUTO_RANDOM)会导致数据在物理存储上高度离散。这种离散性是否会与向量索引(如 HNSW)的局部性原理产生冲突,从而降低向量检索的效率?
首先,雪花算法容易产生热点。随机写入集合了它的优点。更好的避免热点。
其次占个位,不了解向量知识,学习下。
没有使用过向量索引,楼主可以在测试环境上实测一下。
个人觉得使用AUTO_RANDOM带来的收益比检索时的后台同步回表的收益大
vector数据类型感觉与你说的这个id增长问题是不是矛盾呢啊
在 HTAP+AI 的实时知识库场景中,AUTO_RANDOM 主键和 HNSW 向量索引可以共存,写入热点的优化收益远大于数据离散带来的潜在影响。通过合理的索引设计和参数调优,可以完全规避性能问题。
应该有这种可能,这种情况需要更多的考虑主键的选择了
AI 怎么融入数据库中的,有讲解的资料吗
向量检索视角(HNSW 的需求)
HNSW(Hierarchical Navigable Small World)算法的核心在于构建“小世界”网络。
局部性原理:HNSW 依赖于向量在空间上的邻近性。在单机向量数据库(如 Milvus, Faiss)中,为了提高检索速度,通常会尽量将邻近的向量在物理内存或磁盘上连续存储
所以 如果主键是离散的 AUTO_RANDOM ,那么逻辑上相似(可能同时插入)的向量,在 TiKV 的底层 RocksDB 中可能存储在不同的节点、不同的 SST 文件中
1. AUTO_RANDOM 的物理离散机制
AUTO_RANDOM 主键(聚簇索引)会把主键高位做随机分片,让数据均匀打散到 TiDB 的多个 Region、多个 TiKV 节点,彻底解决自增 ID 的单 Region 写入热点。
- 结果:物理存储上,语义相似的向量行,主键完全随机、物理位置高度离散、跨多个 Region / 磁盘块。
2. HNSW 向量索引的局部性原理
HNSW 是多层近邻图索引:
- 核心:在向量高维空间中,把语义相似(距离近)的向量互相连接,构建导航图;检索时从顶层粗筛、逐层下探,只访问局部相似节点,避免全表扫描。
- 关键:HNSW 的局部性是向量空间局部性,和主键 / 物理存储顺序无关;HNSW 索引本身是独立的结构,存储在 TiKV 的独立 Region 中,不依赖聚簇索引顺序。
3. 真正的冲突点(不是 HNSW 逻辑,是存储 IO)
- 主键离散 → 语义相似的向量行,物理上分散在多个 TiKV 节点、多个 Region、多个 SST 文件
- 向量检索(Top-K)需要读取一批相似向量的原始数据(回表):跨 Region、跨节点、随机 IO 变多、磁盘寻道 / 网络开销上升,导致检索延迟增加、吞吐量下降
- 注意:HNSW 的图遍历本身不受主键离散影响,影响只在「回表取原始向量 / 元数据」这一步
1 个赞
感谢老师分享
需要怎么优化呢
对雪花中的事实表能再做分区表看看粉不到不同的region和tikv上