AI向量数据库之LanceDB快速介绍

LanceDB

LanceDB 是一个开源的向量搜索数据库,具备持久化存储功能,极大地简化了嵌入向量的检索、过滤和管理。

LanceDB的主要特点

LanceDB 的主要特点包括:

  • 生产级向量搜索:无需管理服务器。

  • 存储、查询和过滤向量、元数据以及多模态数据(如文本、图像、视频、点云等)。

  • 支持向量相似性搜索、全文搜索和 SQL

  • 原生支持 Python 和 Javascript/Typescript

  • 零拷贝、自动版本控制:无需额外基础设施即可管理数据版本。

  • 支持 GPU 加速构建向量索引(*)。

  • 生态系统集成:与 LangChain 🦜️🔗、LlamaIndex 🦙、Apache-Arrow、Pandas、Polars、DuckDB 等工具集成,更多集成正在开发中。

LanceDB 的核心是用 Rust 🦀 编写的,并基于 Lance 构建。

Lance 是一种开源列式数据格式,专为高性能机器学习工作负载设计。

基于NodeJS 使用 LanceDB

需要先安装NodeJS,这里对 NodeJS的部分就不做过多的介绍。关于NodeJS的介绍和安装可以参考:

npm介绍及与Node.js关联

项目创建

  1. 创建一个项目目录, 这里是 lancedb

  2. 命令行切换到该目录,执行 npm init -y 初始化项目。
    这个命令就是创建 package.json 文件

  3. 创建src 目录用来存放源码
    (src目录非必要, 也有的项目是app目录,目的就是为了让项目结构更清晰)

  4. 安装lanceDB 的库

    npm install @lancedb/lancedb

该命令的作用包括:

  1. 安装 LanceDB 客户端库

    • 该命令会从 npm 仓库下载并安装@lancedb/lancedb包。

    • 安装完成后,你可以在项目中引入 LanceDB 并使用其 API 进行向量存储、查询和管理。

  2. 更新package.json

    • 安装完成后,@lancedb/lancedb会被添加到package.json文件的dependenciesdevDependencies中(取决于你是否使用了--save-dev选项)。

    • 示例:

      json

      复制

      复制代码
      "dependencies": {
        "@lancedb/lancedb": "^1.0.0"
      }
  3. 生成node_modules文件夹

    • 安装的库及其依赖会被下载到项目的node_modules文件夹中。
  4. 生成package-lock.json

    • 安装过程中会更新或生成package-lock.json文件,确保依赖版本的一致性。

编写 Javascript 代码操作LanceDB

在src 下新建一个 quickstart.js 文件,内容如下:

复制代码
import * as lancedb from "@lancedb/lancedb";

const db = await lancedb.connect("data/my-lancedb");
const table = await db.createTable("vectors", [
	{ id: 1, vector: [0.1, 0.2], item: "foo", price: 10 },
	{ id: 2, vector: [1.1, 1.2], item: "bar", price: 50 },
], {mode: 'overwrite'});


const query = table.vectorSearch([0.1, 0.3]).limit(2);
const results = await query.toArray();




const rowsByCriteria = await table.query().where("price >= 10").toArray();

以上代码的解释如下:

1. 导入 LanceDB 库

复制代码
import * as lancedb from "@lancedb/lancedb";
  • 这行代码导入了 LanceDB 的 Node.js 客户端库。

  • import * as lancedb表示将整个库的内容导入为一个命名空间lancedb,方便后续调用其 API。


2. 连接数据库

复制代码
const db = await lancedb.connect("data/my-lancedb");
  • 使用lancedb.connect()方法连接到 LanceDB 数据库。

  • "data/my-lancedb"是数据库的存储路径。如果路径不存在,LanceDB 会自动创建。

  • await表示这是一个异步操作,等待连接完成后再继续执行后续代码。


3. 创建表并插入数据

复制代码
const table = await db.createTable("vectors", [
  { id: 1, vector: [0.1, 0.2], item: "foo", price: 10 },
  { id: 2, vector: [1.1, 1.2], item: "bar", price: 50 },
], { mode: 'overwrite' });
  • 使用db.createTable()方法创建一个名为"vectors"的表。

  • 第二个参数是一个数组,表示要插入的初始数据。每条数据是一个对象,包含以下字段:

    • id: 唯一标识符。

    • vector: 向量数据(例如[0.1, 0.2])。

    • item: 项目的名称(例如"foo")。

    • price: 项目的价格(例如10)。

  • 第三个参数{ mode: 'overwrite' }表示如果表已经存在,则覆盖它。如果表不存在,则创建新表。


4. 向量搜索

复制代码
const query = table.vectorSearch([0.1, 0.3]).limit(2);
const results = await query.toArray();
  • 使用table.vectorSearch()方法进行向量搜索。

    • [0.1, 0.3]是查询向量,LanceDB 会查找与这个向量最相似的数据。
  • limit(2)表示只返回最相似的 2 条结果。

  • await query.toArray()将查询结果转换为数组并返回。

  • 结果会存储在results变量中,通常是一个包含相似向量数据的数组。


5. 条件查询

复制代码
const rowsByCriteria = await table.query().where("price >= 10").toArray();
  • 使用table.query()方法创建一个查询对象。

  • where("price >= 10")是一个过滤条件,表示只返回price字段大于或等于 10 的数据。

  • await query.toArray()将查询结果转换为数组并返回。

  • 结果会存储在rowsByCriteria变量中,通常是一个符合条件的数据数组。

在VS Code的项目目录结构如下:

运行代码

使用node .\src\quickstart.js 命令运行代码, 运行后会在项目目录下创建 data 目录存放Db 的数据, 效果如下:



相关推荐
是阿建吖!10 分钟前
【MySQL】事务
数据库·mysql
FSGF3217 分钟前
大模型MCP:模块化计算的革命性突破
人工智能·mcp
Dm_dotnet25 分钟前
C#连接小智服务器并将音频解码播放过程记录
人工智能
Shockang27 分钟前
机器学习的一百个概念(4)下采样
人工智能·机器学习
Shockang31 分钟前
机器学习的一百个概念(3)上采样
人工智能·机器学习
Asuka0740 分钟前
MySQL数据库和表的操作
数据库·mysql
天上掉下来个程小白1 小时前
Redis-04.Redis常用命令-字符串常用命令
java·数据库·redis·springboot·苍穹外卖
炼数成金1 小时前
程序员副业暴利指南:用Python+AI在小红书月入1W+的终极玩法
人工智能·程序员
智源社区1 小时前
PyTorch Day 首次登陆 2025 智源大会!论文征集开启
人工智能·pytorch·python·深度学习·机器学习
2401_891409261 小时前
国外期货高频数据:历史高频分钟回测数据分享
数据库·金融