#full-text-search #sql-query #in-memory #sql #on-disk #memory-database

reefdb

ReefDB 是一个由 Rust 编写的简洁、内存和磁盘数据库管理系统,实现了基本的 SQL 查询能力和全文搜索。

1 个不稳定版本

0.1.0 2023年5月6日

#2167数据库接口

MIT 许可证

97KB
2.5K SLoC

ReefDB

ReefDB logo

ReefDB 是一个由 Rust 编写的简洁、内存和磁盘数据库管理系统,实现了基本的 SQL 查询能力和全文搜索。

特性

  • 内存或磁盘存储选项
  • 基本 SQL 语句(CREATE TABLE, INSERT, SELECT, UPDATE, DELETE)
  • 支持 INNER JOIN
  • 使用倒排索引的全文搜索
  • 自定义数据类型(INTEGER, TEXT, FTS_TEXT)

依赖

用法

要使用 ReefDB,您可以选择内存存储(InMemoryReefDB)或磁盘存储(OnDiskReefDB)。

内存 ReefDB 示例

use reefdb::InMemoryReefDB;

fn main() {
    let mut db = InMemoryReefDB::new();

    let queries = vec![
        "CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)",
        "INSERT INTO users VALUES (1, 'Alice')",
        "INSERT INTO users VALUES (2, 'Bob')",
        "SELECT * FROM users WHERE id = 1",
    ];

    for query in queries {
        let result = db.query(query);
        println!("Result: {:?}", result);
    }
}

磁盘 ReefDB 示例

use reefdb::OnDiskReefDB;

fn main() {
    let kv_path = "kv.db";
    let index = "index.bin";
    let mut db = OnDiskReefDB::new(kv_path.to_string(), index.to_string());

    let queries = vec![
        "CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)",
        "INSERT INTO users VALUES (1, 'Alice')",
        "INSERT INTO users VALUES (2, 'Bob')",
        "SELECT * FROM users WHERE id = 1",
    ];

    for query in queries {
        let result = db.query(query);
        println!("Result: {:?}", result);
    }
}

全文搜索示例

use reefdb::InMemoryReefDB;

fn main() {
    let mut db = InMemoryReefDB::new();

    let queries = vec![
        "CREATE TABLE books (title TEXT, author TEXT, description FTS_TEXT)",
        "INSERT INTO books VALUES ('Book 1', 'Author 1', 'A book about the history of computer science.')",
        "INSERT INTO books VALUES ('Book 2', 'Author 2', 'A book about modern programming languages.')",
        "INSERT INTO books VALUES ('Book 3', 'Author 3', 'A book about the future of artificial intelligence.')",
        "SELECT title, author FROM books WHERE description MATCH 'computer science'",
    ];

    for query in queries {
        let result = db.query(query);
        println!("Result: {:?}", result);
    }
}

DELETE 示例

use reefdb::InMemoryReefDB;

fn main() {
    let mut db = InMemoryReefDB::new();

    let queries = vec![
        "CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)",
        "INSERT INTO users VALUES (1, 'Alice')",
        "INSERT INTO users VALUES (2, 'Bob')",
        "DELETE FROM users WHERE id = 1",
        "SELECT * FROM users",
    ];

    for query in queries {
        let result = db.query(query);
        println!("Result: {:?}", result);
    }
}

UPDATE 示例

use reefdb::InMemoryReefDB;

fn main() {
    let mut db = InMemoryReefDB::new();

    let queries = vec![
        "CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)",
        "INSERT INTO users VALUES (1, 'Alice')",
        "INSERT INTO users VALUES (2, 'Bob')",
        "UPDATE users SET name = 'Charlie' WHERE id = 1",
        "SELECT * FROM users",
    ];

    for query in queries {
        let result = db.query(query);
        println!("Result: {:?}", result);
    }
}

INNER JOIN 示例

use reefdb::InMemoryReefDB;

fn main() {
    let mut db = InMemoryReefDB::new();

    let queries = vec![
        "CREATE TABLE authors (id INTEGER PRIMARY KEY, name TEXT)",
        "CREATE TABLE books (id INTEGER PRIMARY KEY, title TEXT, author_id INTEGER)",
        "INSERT INTO authors VALUES (1, 'Alice')",
        "INSERT INTO authors VALUES (2, 'Bob')",
        "INSERT INTO books VALUES (1, 'Book 1', 1)",
        "INSERT INTO books VALUES (2, 'Book 2', 2)",
        "SELECT authors.name, books.title FROM authors INNER JOIN books ON authors.id = books.author_id",
    ];

    for query in queries {
        let result = db.query(query);
        println!("Result: {:?}", result);
    }
}

未来改进(TODOs)

  • 实现支持更多 SQL 语句,如 ALTER TABLE、DROP TABLE 和其他 JOIN 类型(LEFT、RIGHT、OUTER)。
  • 添加支持索引和查询优化以提高性能。
  • 实现事务支持和对数据库操作的原子性(事务结构已存在,但不是像 sqlite 中的自动提交模式)
  • 添加对用户定义函数、聚合函数(SUM、COUNT、AVG、MIN、MAX)、分组和排序(GROUP BY 和 ORDER BY)以及存储过程的支持。
  • 改进错误处理和报告。
  • 通过使用更先进的文本处理技术(如词干提取、分词和同义词处理)增强全文搜索功能。
  • 实现身份验证和授权机制以安全地访问数据库。
  • 添加对复制和分布式数据库管理的支持(使用 raft-rs?)
  • 实现命令行界面或 GUI 以与数据库交互。
  • 改进文档并提供各种用例的数据库使用示例。
  • 编写基准测试和性能测试以测量和优化数据库性能。
  • 实施唯一性、主键、外键和检查约束等约束以保持数据完整性。
  • 实现多线程和并发控制,以提高性能并确保数据库的并行访问安全
  • 添加支持处理各种数据类型(例如日期和时间,二进制数据)以及用户自定义数据类型。
  • 优化内存管理和缓存机制,以实现高效的资源利用。

许可证

本项目采用MIT许可证。有关更多信息,请参阅LICENSE

依赖

~1.5–2.3MB
~48K SLoC