#database-driver #driver #amazon #async

qldb

纯Rust实现的Amazon QLDB数据库驱动程序

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 数据库接口

Download history 5924/week @ 2024-05-04 5900/week @ 2024-05-11 6177/week @ 2024-05-18 6306/week @ 2024-05-25 6270/week @ 2024-06-01 6092/week @ 2024-06-08 6168/week @ 2024-06-15 5931/week @ 2024-06-22 6105/week @ 2024-06-29 5940/week @ 2024-07-06 5900/week @ 2024-07-13 5948/week @ 2024-07-20 6112/week @ 2024-07-27 5847/week @ 2024-08-03 5803/week @ 2024-08-10 5644/week @ 2024-08-17

每月下载量24,448

Apache-2.0/MIT

68KB
1K SLoC

Amazon的QLDB驱动程序

纯Rust实现的Amazon QLDB数据库驱动程序。

Documentation Crates.io Rust

该驱动程序经过相当多的测试,应该可以用于实际项目。

示例

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::defaultQldbClient::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