30个版本 (19个稳定版)
3.2.9 | 2024年5月30日 |
---|---|
3.2.8 | 2023年10月1日 |
3.2.7 | 2022年7月17日 |
3.0.1 | 2021年12月14日 |
0.4.1 | 2020年11月18日 |
#417 in 数据库接口
每月下载量24,448
68KB
1K SLoC
Amazon的QLDB驱动程序
纯Rust实现的Amazon QLDB数据库驱动程序。
该驱动程序经过相当多的测试,应该可以用于实际项目。
示例
use qldb::QldbClient;
use std::collections::HashMap;
let client = QldbClient::default("rust-crate-test", 200).await?;
let mut value_to_insert = HashMap::new();
// This will insert a documents with a key "test_column"
// with the value "IonValue::String(test_value)"
value_to_insert.insert("test_column", "test_value");
client
.transaction_within(|client| async move {
client
.query("INSERT INTO TestTable VALUE ?")
.param(value_to_insert)
.execute()
.await?;
Ok(())
})
.await?;
会话池
驱动程序具有会话池。QldbClient::default中的第二个参数是连接池的最大大小。
在达到提供的最大值之前,池将随着并行事务的请求自动填充。
池使用一个独立的线程和一个单线程执行器(async-executor),以便在会话返回后能够派生任务。
备用会话池
存在一个备用的会话池,它需要一个提供者函数。它允许使用执行器的spawn函数来运行池。我们已经测试了async-std和tokio,但其他也应该可以工作。
此池将启动两个内部任务来处理池。
如果您想让此驱动程序不创建新线程,请使用此方法。
async-std示例
let client = QldbClient::default_with_spawner(
"rust-crate-test",
200,
Arc::new(move |fut| {async_std::task::spawn(Box::pin(fut));})
)
.await?
或者,使用tokio
let client = QldbClient::default_with_spawner(
"rust-crate-test",
200,
Arc::new(move |fut| {tokio::spawn(Box::pin(fut));})
)
.await?
选择要使用的池
默认情况下,可以通过使用方法QldbClient::default
和QldbClient::default_with_spawner
来使用两个池。如果您不想在运行时使用池,可以删除默认功能来禁用。但是,您至少需要添加一个功能来启用一个池。
这将仅启用默认池,即使用一个线程的池。
qldb = { version = "3", default_features = false, features = ["internal_pool_with_thread"]}
这将仅启用备用池,即需要提供者函数的池。
qldb = { version = "3", default_features = false, features = ["internal_pool_with_spawner"]}
底层Ion格式实现
库使用ion-binary-rs,这是我们自己的纯Rust格式实现。它经过充分的测试,也适合在生产环境中使用。
测试
为了测试,您需要在您的电脑上(作为环境变量或位于 ~/.aws/credentials 中)有一些AWS凭证。AWS账户中必须有一个名为 "rust-crate-test" 的QLDB数据库。测试需要顺序运行,因此,为了运行测试,请运行以下命令
RUST_TEST_THREADS=1 cargo test
依赖项
~21–35MB
~658K SLoC