0.1.0-dev-2 |
|
---|---|
0.1.0-dev-1 |
|
0.1.0-dev-0 |
|
0.1.0-dev.4 |
|
0.1.0-dev.3 |
|
#2 in #pliant-db
每月下载量 21 次
用于 4 个crate (直接使用 2 个)
14KB
338 行
PliantDB
PliantDB 旨在成为一个由 Rust 编写的、符合 ACID 的文档数据库,灵感来自 CouchDB。虽然它受到了 CouchDB 的启发,但这个项目不会试图与现有的 CouchDB 服务器兼容,它将实现自己的复制、集群和分片策略。
项目目标
本项目的高级目标是
- ☑️ 使用 Rust 类型定义文档型数据库的模式。
- ☑️ 在您的 Rust 二进制文件中运行,简化基本部署。
- ☑️☑️ 作为仅本地文件数据库运行,不涉及网络。
- ☑️☑️ 在多数据库、网络服务器模式下运行,默认启用 TLS
- 轻松设置多个服务器之间的只读副本。
- 轻松在至少 3 台服务器上运行高度可用的基于法定人数的集群。
- 提供发布/订阅事件系统
- 提供作业队列和调度系统 -- 类似于 Sidekiq 或 SQS
⚠️ 本项目的状态
请勿尝试将此软件用于除实验之外的其他用途。 此项目正在积极开发中 (),但在编写此 README 时,该项目的开发还处于早期阶段,不适合使用。
如果您对这个项目感兴趣或想进行贡献,请加入我们的 Discord 进行交流: 。
示例
请查看 ./pliantdb/examples 了解示例。为了了解其工作原理,这是一个简单的模式
// From pliantdb/examples/view-examples.rs
#[derive(Debug, Serialize, Deserialize)]
struct Shape {
pub sides: u32,
}
impl Collection for Shape {
fn id() -> collection::Id {
collection::Id::from("shapes")
}
fn define_views(schema: &mut Schema) {
schema.define_view(ShapesByNumberOfSides);
}
}
#[derive(Debug)]
struct ShapesByNumberOfSides;
impl View for ShapesByNumberOfSides {
type Collection = Shape;
type Key = u32;
type Value = ();
fn version(&self) -> u64 {
1
}
fn name(&self) -> Cow<'static, str> {
Cow::from("by-sides")
}
fn map(&self, document: &Document<'_>) -> MapResult<Self::Key> {
let shape = document.contents::<Shape>()?;
Ok(Some(document.emit_key(shape.sides as u32)))
}
}
在定义了您的集合(s)之后,您可以打开数据库并进行查询
let db =
Storage::<Shape>::open_local("view-examples.pliantdb", &Configuration::default()).await?;
// Insert a new document into the Shape collection.
db.collection::<Shape>()?.push(&Shape::new(3)).await?;
// Query the Number of Sides View to see how many documents have 3 sides.
println!(
"Number of triangles: {}",
db.view::<ShapesByNumberOfSides>()
.with_key(3)
.query()
.await?
.len()
);
为什么还要编写另一个数据库?
- 部署高度可用的数据库很难(并且通常很昂贵)。这不必如此。
- 我们是热衷于 Rust 的程序员,正在努力实现一个理想,即支持 100% 基于 Rust 的新软件部署生态系统。
- 特别是对于创始人@ecton,这个设计的想法可以追溯到我在使用基于CouchDB的上一家公司时,关于有趣侧项目的思考。从事这个项目实现了他长期以来的愿望。
备份
直接访问数据库的导出和恢复
如果您有一个本地的PliantDB
数据库,您可以使用local-backup
命令保存和加载备份
pliantdb local-backup <database-path> save
pliantdb local-backup <destination-database-path> load <backup-path>
如果是从PliantDB迁移到另一个解决方案,或者需要进行复杂的灾难恢复工作,这个导出格式应该很容易处理。它在这里描述。
开发PliantDB
提交前钩子
我们的CI流程要求一些命令在无警告或错误的情况下成功。为了确保您提交的代码可以通过基本检查,请安装包含的pre-commit钩子
./git-pre-commit-hook.sh install
完成之后,包括cargo fmt
、cargo doc
和cargo test
在内的工具都会在执行git commit
之前进行检查。
开源许可证
这个项目,就像Khonsu Labs的所有项目一样,都是开源的。这个仓库可以在MIT许可证或Apache许可证2.0下使用。
依赖
~4–10MB
~101K SLoC