LanceDB向量数据库


发布于 2026-01-14 / 3 阅读 / 0 评论 /
介绍LanceDB

AI带来的机遇

AI 的飞速发展为 Data Infra 数据基建带来了前所未有的挑战和机遇。随着 LLM 和多模态AI的兴起,非结构化数据的规模指数级增长,这不仅加剧了数据存储和管理的难度,也对数据的高效检索和分析提出了更高要求。

就像在云计算时代,Snowflake 和 Databricks 成为了数据乃至整个软件行业最快增长的产品,而到了 AI 时代,我们也相信会诞生新的数据产品。

新时代数据产品需解决的问题

第一个问题是多模态数据规模提高之后带来的 scalability 挑战:

(1)非结构化数据在 AI 合成的加持下规模持续上升,Data Infra 需要能够灵活地横向扩展以支持不断增长的需求;

(2)不同模态的数据具有不同的特征和处理需求。例如文本数据需要全文索引,而图像数据则可能需要特征向量索引,而且为 AI 设计的索引和传统搜索的索引会有所不同;

(3)AI 应用对数据存储的实时性会提出新要求,实时语音交互和图像检索都会对数据库的读取查询性能提出极高的要求;

第二个问题是数据栈中的工作流还未确定,RAG 作为主流方案还在快速演进的阶段:

(1)RAG 数据栈涉及数据预处理、向量化、索引、检索和生成等多个环节,每个环节都有多种技术选择:

(2)RAG 中的 embedding model, retriever, reranker 等模型都最好用行业数据进行 fine-tune 达到最佳效果,使工作流高度复杂和模块化;

(3)标准化和可复现性低,由于前面提到的长链条、高度定制化,这导致 RAG 本身难以端到端产品化

AI 数据库时代的 CAP 理论

即传统数据库面对 AI 任务时的不可能三角:

(1)随机读取(random access),可以直接访问任意位置或记录的能力,例如在训练模型时的 data shuffling;

(2)大块数据(large blobs),高效地存储和检索大规模数据,例如在训练模型时的 data distribution;

(3)快速扫描(fast scans),高效的全表或大范围扫描,例如在训练模型时的 data filtering。

LanceDB简介

LanceDB 是一个专为多模态数据设计的高性能向量数据库,旨在高效管理和搜索大规模的向量数据,特别适合用于 AI/ML 等应用场景,尤其是在多模态数据(如图像与文本嵌入)场景。

LanceDB 的两位联合创始人:Chang She 是 Pandas 的作者之一,Pandas 是最受欢迎的Python 数据科学库;Lei Xu 则是自动驾驶公司 Cruise 的数据基础设施的核心成员,有着丰富的多模态数据基建经验。

LanceDB特点

主要特点有:

(1)提供单机服务,可以直接嵌入到应用程序中

(3)支持多种向量索引算法,包括Flat、HNSW、IVF等。

(3)支持全文检索,包括BM25、TF-IDF等。

(4)支持多种向量相似度算法,包括Cosine、L2等。

(5)与Arrow生态系统紧密集成,允许通过 SIMD 和 GPU 加速在共享内存中实现真正的零拷贝访问。

向量搜索

向量搜索是一种在高维空间中搜索向量的方法,主要是将原始数据通过嵌入模型得到向量,然后通过向量相似度算法计算向量之间的距离,从而找到最相似的向量。

embedding

embedding 是将原始数据通过嵌入模型得到向量的过程,嵌入模型可以是预训练的模型,也可以是自己训练的模型,是一种将文本、图像、音频等数据投影到二维空间的方法。

索引

和关系型数据库一样,向量数据库也需要索引来加速查询,索引是一种数据结构,用于快速查找数据,LanceDB 使用基于磁盘的索引:IVF-PQ,是倒排索引的一种变体,使用PQ 来做压缩嵌入。

PQ 原理主要分为以下步骤:

(1)对向量进行分桶,将向量分为多个桶,每个桶包含多个向量,比如 样本的维度 D=1024,桶的数量 M=64,每个桶的维度 16;

(2)对样本的每个段分别进行聚类,聚成 k=256(其中 K 可以定义) 个聚类中心,这样整个样本被分为 M*K 个聚类中心,每个聚类中心分配一个 ID(范围 0-K-1);

(3)通过上面的聚类和 ID 分配,每个样本就会变成量化后的向量,例如 [28, 100, 99, 255 ...];

(4)对于新加入样本按照第一步的分桶方式切分,然后再聚类的分段里面找到最近的类中心,然后将聚类中心的 ID 作为量化后的向量;

通过以上的处理,原来 1024 维度向量*float类型(1024 * 4 字节)被压缩到 64 个字节,大大减少了存储空间和计算量,当然量化是有损的,所以对于数据量不大的情况,可以不使用索引,直接暴力搜索。

暴力搜索和 ANN 搜索

如果要搜索的准确度,执行暴力搜索是一种好的选择,基本上就是对所有的向量进行相似度计算,然后返回最相似的向量,相当于 kNN 搜索。

kNN 和每个向量都做距离计算,计算量比较大,所以需要使用 ANN 搜索,ANN 搜索是一种基于树的搜索方法,使用树结构来存储向量,然后通过树的搜索来找到最相似的向量。

HNSW

HNSW 是一种基于图的搜索方法,使用图结构来存储向量,然后通过图的搜索来找到最相似的向量,原理类似跳跃表,通过分层的 k-ANN 图来实现递归搜索。