14 个版本 (1 个稳定版本)

2.0.0 2021年11月4日
0.11.0 2021年10月28日
0.10.4 2021年10月27日
0.10.0 2021年2月19日
0.2.0 2020年11月7日

1236数据库接口 中排名

每月下载量:33

MIT 许可证

110KB
2.5K SLoC

Crates.io Discord docs.rs License

PoloDB 是一个嵌入式文档数据库。

| 文档 |

简介

PoloDB 是一个用 Rust 编写的库,实现了轻量级的 MongoDB

为什么

PoloDB 致力于提供一种现代的替代方案,用于 SQLite,目前它是客户端数据存储的几乎唯一选择。尽管 SQLite 是一种老而稳定的软件,但它缺乏一些现代功能。因此,我们开发了 PoloDB,这是一个 NoSQL 数据库,支持多线程和多会话,并保留了 SQLite 的嵌入式和轻量级特性。

特性

  • 简单轻量
  • 易于学习和使用
    • 非关系型数据库
    • 类似 MongoDB 的 API
  • 跨平台
  • 多个后端
    • 文件系统(WAL)
    • 内存
    • IndexedDB(WIP)

快速入门

PoloDB 易于学习和使用

use polodb_core::Database;
use serde::{Serialize, Deserialize};

#[derive(Debug, Serialize, Deserialize)]
struct Book {
    title: String,
    author: String,
}

let db = Database::open_file(db_path)?;
let collection = db.collection::<Book>("books");
collection.insert_one(Book {
    title: "The Three-Body Problem".to_string(),
    author: "Liu Cixin".to_string(),
})?;

后端

文件系统后端

使用文件系统后端,PoloDB 将数据存储在一个单独的文件中。所有数据都持久地保存在磁盘上。

它被设计为灵活、通用且易于搜索。所有数据都使用 bson 格式编码,并以 PoloDB 的 lsm-tree 格式存储。

PoloDB 使用 WAL(写入前日志)来实现事务性写入并保护数据免受程序崩溃的影响。

内存后端

使用内存后端,所有数据都存储在内存中,使 PoloDB 成为一个纯内存数据库。

平台

理论上,PoloDB 支持所有 Rust 编译器支持的平台。但 PoloDB 是一个个人项目。由于时间限制,我仅在以下平台上编译和测试了它

  • macOS Big Sur x64
  • Linux x64 (在 Fedora 32 上测试)
  • Windows 10 x64

手册

路线图

功能将按顺序逐一实现。

  • 后端
    • 内存
    • 文件
    • IndexedDB(WIP)
  • 基本数据库 API
    • CRUD
    • 事务
    • 序列化/反序列化
    • 索引(Alpha)
    • 聚合
  • 命令行工具
  • 平台
    • macOS
    • Linux
    • Windows
    • 网络浏览器(WIP)
    • iOS
    • Android
  • 可视化工具

依赖项

~1.5MB
~23K SLoC