LanceDB:为 AI 应用打造的高效嵌入式向量数据库

向量数据库关系型数据库NoSQL数据库

当前,向量数据库已经成了一个红海市场,新兴的还是传统数据库厂商都在做这方面的工作。然而,在嵌入式,端上的向量数据库比较少,chromaDB算是其中一个,但它不算是一个纯原生、深度优化的的嵌入式向量数据库,仍采用parquet格式(读一行数据需要读取整个块解压,比较慢,另外副本占用空间),功能也比较少,那有没有更好的选择呢?很多人自然想到关系型嵌入式数据库王者——Sqlite,奈何它的向量版本 sqlite-vec还处于开发中,那有没有文档性能还好的替代品呢?LanceDB是一个选择。

picture.image

LanceDB 是一个专为构建 AI 应用而设计的开源向量数据库。它采用嵌入式架构,无需部署独立服务器,可以轻松集成到各种应用场景中。

picture.image

核心功能和优势在于:

  1. 嵌入式架构。与需要部署服务器的 Qdrant 等产品不同,LanceDB 采用嵌入式设计,作为应用的一部分运行,易于集成且无需额外的基础设施管理。
  2. 专为AI设计的Lance 数据格式(最大亮点) 。LanceDB 使用专门优化的 Lance 列式存储格式,相比传统的 Parquet 格式具有更快的扫描速度。它支持数据分片,只加载必要的数据片段,大大减少 IO 开销。同时具有机器学习所需的自动数据版本管理能力,不同的版本会关联该版本相关文件、模式及 blob 的元数据,更新数据时无需完整重写(Zero-copy)。

picture.image

相较于其他的常见格式对比,在机器学习场景场景中优势明显:

picture.image

数据cap理论

LanceParquet & ORCJSON & XMLTFRecordDatabaseWarehouse
AnalyticsFastFastSlowSlowDecentFast
Feature EngineeringFastFastDecentSlowDecentGood
TrainingFastDecentSlowFastN/AN/A
ExplorationFastSlowFastSlowFastDecent
Infra SupportRichRichDecentLimitedRichRich
  1. 高性能向量搜索。基于 Rust 语言开发,具有优秀的性能表现。根据官方基准测试,在同等硬件条件下,对于 128 维向量的 10 亿规模数据集,查询延迟可以控制在 100ms 以内。并且支持GPU加速。
  2. 丰富的生态集成。LanceDB 原生支持 Python 和JavaScript/TypeScript,并与 LangChain 、LlamaIndex 等主流 AI 框架无缝集成。同时也支持 Apache Arrow 、Pandas 、Polars 、DuckDB 等数据处理工具。
  3. 多模态数据支持。除了向量数据,LanceDB 还能高效存储和检索文本、图像、音频等非结构化数据,无需额外的存储解决方案。

使用 LanceDB 非常简单,下面是使用示例:

  • Python版本:

          
import lancedb  
  
# 连接数据库  
db = lancedb.connect("data/sample-lancedb")  
  
# 创建表并插入数据  
table = db.create_table("my\_table",  
    data=[{"vector": [3.1, 4.1], "item": "foo", "price": 10.0},  
          {"vector": [5.9, 26.5], "item": "bar", "price": 20.0}])  
  
# 执行向量搜索  
result = table.search([100, 100]).limit(2).to_pandas()  
  

      
  • js版本,搭配transformers使用。

          
async function example() {  
  
    const lancedb = require('vectordb')  
  
    // Import transformers and the all-MiniLM-L6-v2 model (https://huggingface.co/Xenova/all-MiniLM-L6-v2)  
    const { pipeline } = await import('@xenova/transformers')  
    const pipe = await pipeline('feature-extraction', 'Xenova/all-MiniLM-L6-v2');  
  
  
    // Create embedding function from pipeline which returns a list of vectors from batch  
    // sourceColumn is the name of the column in the data to be embedded  
    //  
    // Output of pipe is a Tensor { data: Float32Array(384) }, so filter for the vector  
    const embed_fun = {}  
    embed_fun.sourceColumn = 'text'  
    embed_fun.embed = async function (batch) {  
        let result = []  
        for (let text of batch) {  
            const res = await pipe(text, { pooling: 'mean', normalize: true })  
            result.push(Array.from(res['data']))  
        }  
        return (result)  
    }  
  
    // Link a folder and create a table with data  
    const db = await lancedb.connect('data/sample-lancedb')  
  
    const data = [  
        { id: 1, text: 'Cherry', type: 'fruit' },  
        { id: 2, text: 'Carrot', type: 'vegetable' },  
        { id: 3, text: 'Potato', type: 'vegetable' },  
        { id: 4, text: 'Apple', type: 'fruit' },  
        { id: 5, text: 'Banana', type: 'fruit' }  
    ]  
  
    const table = await db.createTable('food\_table', data, embed_fun)  
  
  
    // Query the table  
    const results = await table  
        .search("a sweet fruit to eat")  
        .metricType("cosine")  
        .limit(2)  
        .execute()  
    console.log(results.map(r => r.text))  
  
}  
  
example().then(_ => { console.log("Done!") })  

      

更多参考资源:https://github.com/lancedb/vectordb-recipes

相比需要部署服务器的向量数据库,LanceDB 的嵌入式架构特别适合:

  • 需要在本地运行的桌面应用
  • 资源受限的边缘计算环境
  • 对数据隐私有严格要求的场景
  • 快速原型开发和测试

虽然在处理海量数据时,LanceDB 展现出了显著的性能优势,但对于大多数中小规模的 AI 应用来说,开发效率和易用性可能是更重要的考虑因素。LanceDB 简单直观的 API 设计和完善的生态支持,使其成为构建各类 AI 应用的理想选择。

小结

事实上,当前很多的应用都选择lancedb作为其实现方案,比如微软的GraphRAG,Character AI , MidJourney等,它们也获得了YC 800 万美元的种子轮融资。2025年,我们将迎来多模态LLM应用的爆发,这也将会带来向量数据库的新一轮的热潮,作为嵌入式向量数据库的最佳代表,无论是用于构建原型还是部署生产环境,都是一个值得考虑的选择,甚至可能是不二选择。

参考:

https://blog.lancedb.com/new-funding-and-a-new-foundation-for-multimodal-ai-data/

https://lancedb.github.io/

https://github.com/lancedb/lancedb

后台回复“进群”了解更多

0
0
0
0
关于作者
相关资源
字节跳动 NoSQL 的实践与探索
随着 NoSQL 的蓬勃发展越来越多的数据存储在了 NoSQL 系统中,并且 NoSQL 和 RDBMS 的界限越来越模糊,各种不同的专用 NoSQL 系统不停涌现,各具特色,形态不一。本次主要分享字节跳动内部和火山引擎 NoSQL 的实践,希望能够给大家一定的启发。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论