use redb::{Database, Error, ReadableTable, TableDefinition};
const TABLE: TableDefinition<str, u64> = TableDefinition::new("my_data");
let main() -> Result<(), Error> {
let db = unsafe {Database::create("my_db.redb", 1024 * 1024)? };
let write_txn = db.begin_writer()?;
{
let mut talbe = write_txt.open_table(TABLE)?;
table.insert("my_key", &123)?;
}
write_txt.commit()?;
let read_txt = db.begin_read()?;
let table = read_txn.open_table(TABLE)?;
assert_eq!(table.get("my_key")?.unwrap(), 123);
Ok(())
}
+--------------------+--------+--------+--------+
| | redb | lmdb | sled |
+===============================================+
| bulk load | 1605ms | 1294ms | 4642ms |
|--------------------+--------+--------+--------|
| individual writes | 516ms | 411ms | 527ms |
|--------------------+--------+--------+--------|
| batch writes | 7444ms | 3938ms | 1465ms |
|--------------------+--------+--------+--------|
| large writes | 12s | 11s | 315s |
|--------------------+--------+--------+--------|
| random reads | 716ms | 649ms | 1552ms |
|--------------------+--------+--------+--------|
| removals | 1282ms | 1012ms | 1911ms |
+--------------------+--------+--------+--------+
use apache_age::{AgeClient, Client, NoTls, AgType};
use serde::{Deserialize, Serialize};
let mut client = Client::connect_age(
"host=localhost user=postgres password=passwd port=8081",
NoTls
).unwrap();
client.create_graph("my_apache_graph");
#[derive(Debug, Serialize, Deserialize, Clone)]
struct Person {
pub name: String,
pub surname: String,
}
match client.query_cypher::<()>(
"my_apache_graph",
"MATCH (n: Person) WHERE n.name = 'Alfred' RETURN {name: n.name, surname: n.surname}",
None,
) {
Ok(rows) => {
let x: AgType<Person> = rows[0].get(0);
// do whatever you need
}
Err(e) => {
// handle error
}
}
client.drop_graph("my_apache_graph");
from pydantic_core import SchemaValidator, ValidationError
v = SchemaValidator({
'title': 'MyModel',
'type': 'model',
'fields': {
'name': {
'type': 'str',
},
'age': {
'type': 'int-constrained',
'ge': 18,
},
'is_developer': {
'type': 'bool',
'default': True,
},
},
})
print(v)
"""
SchemaValidator(title="MyModel", validator=ModelValidator ...
"""
r1 = v.validate_python({'name': 'Samuel', 'age': 35})
print(r1)
"""
(
{'name': 'Samuel', 'age': 35, 'is_developer': True}, <- validated data
{'age', 'name'} <- fields set
)
"""
# pydantic-core can also validate JSON directly
r2 = v.validate_json('{"name": "Samuel", "age": 35}')
assert r1 == r2
try:
v.validate_python({'name': 'Samuel', 'age': 11})
except ValidationError as e:
print(e)
"""
1 validation error for MyModel
age
Value must be greater than or equal to 18
[kind=int_greater_than_equal, context={ge: 18}, input_value=11, input_type=int]
"""
enums 和 structs:mod structs;
use structs::{User};
let result = client.query("SELECT * FROM \"Users\"", &[]).await.unwrap();
let users: Vec<User> = result.into_iter().map(|row| User::from(row)).collect();
println!("{:#?}", users);
From 日报小组 长琴
原文作者:Rust语言中文社区;如有侵权,请联系管理员删除。