LanceDB向量数据库
概述
LanceDB是一个开源的向量数据库(https://github.com/lancedb/lancedb),旨在提供基于Embedding数据的存储、管理、查询和检索大规模多模态数据,适用于需要存储和检索具有复杂关系的数据集,支持多种数据类型,支持向量、全文、以及混合检索,可以构建复杂的关系图谱。
整体架构
-
基于 Lance Columnar 格式,高效存储向量数据
-
数据层-查询层分离架构,提升查询性能
-
特殊的存储引擎设计,支持高效向量操作
-
多级索引管理,平衡查询速度和精度
-
智能内存-磁盘交互策略,优化资源利用
核心优势
-
多模态支持:存储和搜索文本、图像、音频等多种数据类型的向量表示
-
多方式部署:支持本地部署,同时提供云托管服务
-
多索引支持:支持IVFPQ、HNSW等高效索引算法,适应不同场景
-
混合检索:结合了向量相似度和传统过滤条件的混合查询能力
-
AI工作流集成:与LangChain、LlamaIndex等AI框架无缝集成
安装部署
本地部署
1、安装
pip install lancedb
2、使用示例:
import lancedb
import pandas as pddb = lancedb.connect("./lancedb"
)# 使用pandas创建一个二维数据集
# 为了简单演示数据库的检索功能,这里手动创建了vector向量,实际使用中需要使用Embedding模型进行处理
data = pd.DataFrame({"vector": [[1.1, 2.3],[4.5, 6.0]],"text": ["hello","world"]
})table = db.create_table("my_table", # 创建表data
)query = [1.0, 2.0]results = table.search( # 相似度搜索query
).limit(1).to_list() # 限制搜索结果个数为1,并将结果转为列表# 打印结果
print(results)
输出结果:
[{'vector': [1.100000023841858, 2.299999952316284], 'text': 'hello', '_distance': 0.09999997913837433}]
云部署
1、注册(https://lancedb.com/)
选择自己合适的方式进行注册:
按照以下步骤进行项目创建和获取API key
项目创建完成(如图中的URI,在连接数据库是需要通过uri=参数传入)
2、连接并使用数据库
import lancedb# 创建数据库连接
db = lancedb.connect(uri="db://default-ho2p88", # URI 是页面创建项目之后生成的api_key="你创建项目是生成的API",region="us-east-1"
)# 构建数据集
data = [{"vector": [3.1, 4.1], "item": "foo", "price": 10.0},{"vector": [5.9, 26.5], "item": "bar", "price": 20.0},
]
# 创建表my_table1并写入data数据
table_name = "my_table1"
tbl = db.create_table(table_name, data=data)# 后续查询操作和本地部署是一致的
query = [2.0, 4.0]results = tbl.search( # 相似度搜索query
).limit(1).to_list() # 限制搜索结果个数为1# 打印结果
print(results)
运行结果:
[{'vector': [3.0999999046325684, 4.099999904632568], 'item': 'foo', 'price': 10.0, '_distance': 1.2199997901916504}]
云端可以查看写入的数据: