5个不稳定版本
0.3.1 | 2021年5月4日 |
---|---|
0.3.0 | 2020年10月31日 |
0.2.0 | 2020年10月27日 |
0.1.1 | 2020年5月20日 |
0.1.0 | 2020年3月21日 |
#5 in #entity-id
每月 25 次下载
用于 dodo
4KB
多度(发音为 doe doe
)是一个非常基础的持久化库,旨在提供一个快速简单创建持久化存储的方法。它底层使用 Serde 来执行持久化数据的序列化。
用法
将以下内容添加到您的 Cargo.toml
中
[dependencies]
dodo = "0.3"
serde = { version = "1.0", features = ["derive"] }
uuid = { version = "0.8", features = ["serde", "v4"] }
示例
use std::error::Error;
use dodo::prelude::*;
use serde::{Deserialize, Serialize};
use uuid::Uuid;
//The "Entity" derive implements the "Entity" trait for you.
#[derive(Debug, Entity, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
struct Person {
//Every entity must have an "id" field of type "Option<Uuid>".
id: Option<Uuid>,
name: String,
age: u64,
}
//You should create a type for shorter names
type PersonCollection = Collection<Person, Directory, JsonSerializer>;
fn main() -> Result<(), Box<dyn Error>> {
// Create collection
let mut collection = PersonCollection::new(Directory::new("./person/collection")?);
//Clear collection
collection.clear()?;
// Add a person
let mut person = Person { id: None, name: "John Smith".into(), age: 42 };
collection.insert(&mut person)?;
// Get a person
let id = person.id.unwrap();
let mut person = collection.find(id)?;
// Find persons older than 20
let _persons = collection.find_all()?.filter(|person| person.age > 20).collect()?;
// Update a person
person.name = "Mary Smith".into();
collection.update(&person)?;
// Delete a person
collection.delete(person.id.unwrap())?;
Ok(())
}
动机
并不是每次都需要一个完整的数据库。有时,它们的功能过于丰富,不适合您的需求。这时,多度就派上用场了:为基本应用程序提供基本数据存储。
另一方面,当存储大量数据,具有复杂的关系和查询时,请使用您喜欢的数据库实现,无论是SQL还是NoSQL。多度在这些情况下无法提供帮助:它不是为此而设计的。
多度并不是为了快速或高效而设计的。您现在拥有的功能可能就是您将永远拥有的唯一功能。
常见问题解答
“多度”是什么意思?
在法语中,faire dodo
的意思是 to sleep
。从某种意义上说,这个库将数据放入存储(如硬盘或SSD)中“睡眠”。它也是一种已经灭绝的无翼鸟类。
为什么当找不到东西时,你会返回一个错误?
为了更好的用户体验。使用 Result<Option<T>>
在迭代器中可能会很麻烦。这也使 match
语句更加简洁。
为什么我必须使用 UUID
作为实体的ID?
这种方式更简单。目前,分配每个实体的id是集合的责任。因此,集合必须有一种动态生成新id的方式,这对于每种类型来说并不简单。这就是为什么Dodo使用UUIDs:生成新的UUID很简单,且碰撞很少。
能否将数据序列化为除了JSON以外的格式?
当然可以。创建自己的Serializer
trait实现,然后就可以了。使用Serde应该没问题。如果你激活了yaml
功能,也可以使用YAML。
更新日志
查看CHANGELOG.md文件以获取版本详细信息。
许可证
本项目采用MIT许可证 - 详细内容请见LICENSE.md文件。
依赖项
约1.5MB
约35K SLoC