#vector-database #sql-database #vector-search #vector #search #embedded-database

bin+lib oasysdb

具有 SQL 集成和多索引支持的混合向量存储

18 个版本 (6 个破坏性更新)

0.7.3 2024 年 8 月 7 日
0.6.1 2024 年 6 月 12 日
0.3.0 2024 年 3 月 16 日

#249 in 数据库接口

Download history 208/week @ 2024-04-27 182/week @ 2024-05-04 149/week @ 2024-05-11 66/week @ 2024-05-18 284/week @ 2024-05-25 44/week @ 2024-06-01 169/week @ 2024-06-08 30/week @ 2024-06-15 4/week @ 2024-06-22 5/week @ 2024-06-29 58/week @ 2024-07-06 92/week @ 2024-07-27 387/week @ 2024-08-03 22/week @ 2024-08-10

每月 501 次下载

Apache-2.0

105KB
2K SLoC

OasysDB Use Case

GitHub Stars Discord Documentation Crates.io

介绍 OasysDB 👋

OasysDB 是一种混合向量数据库,允许您将类似 SQLite 和 Postgres 这样的关系型数据库用作向量数据的存储引擎,而无需使用它们来计算昂贵的向量操作。

这使得您可以将数据合并到一个数据库中,并确保数据完整性高,同时具有传统数据库的 ACID 属性,同时还有一个快速且隔离的向量索引层。

有关 OasysDB 的更多详细信息,请访问 文档

快速入门 🚀

目前,OasysDB 仅适用于 Rust 项目作为嵌入式数据库。我们仍在努力实现 RPC API,以便您可以将 OasysDB 作为独立服务在任何语言中使用。

OasysDB 有 2 个主要组件: 数据库索引

  • 数据库负责管理向量索引并将存储引擎(SQL 数据库)连接到索引作为数据源。OasysDB 使用 SQLx 处理 SQL 数据库操作。

  • 索引实现向量索引算法,负责存储和查询向量。索引的功能和算法取决于我们创建索引时选择的算法。

嵌入在 Rust 中

要将 OasysDB 作为嵌入式向量数据库用于您的 Rust 项目,只需将其添加到项目的 Cargo.toml 文件中,或在终端运行以下命令

cargo add oasysdb

当作为嵌入式数据库运行 OasysDB 时,您将访问数据库和索引接口。在很少的情况下,如果您正在构建不使用 SQL 的项目,您可以直接使用索引接口。否则,下面的快速入门指南将向您展示如何使用数据库接口。

// Use the prelude module to import all necessary functionalities.
use oasysdb::prelude::*;

// Open OasysDB database with connection to SQLite.
// Connection is required for new database but optional for existing ones.
let sqlite = "sqlite://sqlite.db";
let db = Database::open("odb_test", Some(sqlite)).unwrap();

// Create a new index with IVFPQ algorithm with default parameters.
let params = ParamsIVFPQ::default();
let algorithm = IndexAlgorithm::IVFPQ(params);
// Setup where the data of the index will come from.
let config = SourceConfig::new("table", "id", "vector");
db.create_index("index", algorithm, config).unwrap();

// Search the index for nearest neighbors of a query vector.
let query = vec![0.0; 128];
let filters = ""; // Optional SQL-like filter for the search.
let results = db.search_index("index", query, 10, filters).unwrap();

更多资源

Discord Documentation

除了本快速入门指南中展示的内容外,OasysDB 还有更多内容。请访问 OasysDB 的 文档 以获取更多信息。此外,如果您有任何问题或需要即时响应的帮助,请加入我们的 Discord 服务器,我将尽力尽快帮助您。

贡献 🤝

为这个项目做贡献最简单的方式是给它加星并分享给你的朋友。这将帮助我们壮大社区,并使这个项目对可能需要它的其他人更加可见。

如果你想要更进一步,贡献你的专业知识,我们非常欢迎你的代码贡献。有关更多信息和建议,请参阅为OasysDB做出贡献

如果你对这个领域有深入的经验,但没有时间贡献代码,我们也欢迎你的建议、建议或功能请求。我们还在寻找顾问,以帮助指导项目方向和路线图。

如果你对项目有任何兴趣,请加入我们的Discord服务器。帮助我们壮大社区,让OasysDB变得更好 😁

免责声明

该项目仍处于早期开发阶段。我们正在积极改进它,并预计API和功能将发生变化。我们不推荐在生产环境中使用。如果你确实如此使用,请告诉我们,我们可以尽快帮助你解决可能遇到的问题。

依赖项

~14–26MB
~420K SLoC