Meilisearch 如何在一分钟内更新数百万向量嵌入数据库

这是一系列博客文章中的一篇,主要内容如下:

  • 系列文章列表:包含Spotify-Inspired: Elevating Meilisearch with Hybrid Search and Rust等多篇文章。
  • 增量索引实现:在本博客中讨论了在 Arroy 中实现增量索引的方法,增量索引意味着插入或删除树中的项目时,只需更新所需部分而无需重建整个树。在 Meilisearch 中这很重要,因为用户经常发送更新,内容不断变化,重建所有内容成本很高。

    • 理论部分:展示了添加和删除文档到现有树时的高级视图,Arroy 基于 LMDB,存储向量的树由三种节点组成,插入和删除操作时会进行相应的节点分裂和调整。
    • ID 生成问题及解决方法:索引过程开始时需要收集现有树的所有 ID,最初的想法是创建并共享可用 ID 的迭代器,但会遇到线程同步问题。后来改为让每个线程拥有自己的 ID 列表,在创建新树时遇到问题,最终采用共享只读位图和原子索引的方法解决,实现了无锁的 ID 生成。
    • 实践中的性能:在有几十万项的基准测试中,经过三批索引项目后平均速度提升超过 10 倍,随着项目数量增加创建新树会导致时间增加,此功能已在包含数百万文档的生产数据中使用,在 200 万项的数据库中 1 分钟内可添加约 9000 项。
阅读 24
0 条评论