12个版本 (4个稳定版)

1.3.0 2023年5月1日
1.2.0 2021年10月22日
1.0.0 2020年10月29日
0.6.0 2020年9月11日
0.0.1 2017年2月8日

#300数据库接口

Download history 295/week @ 2024-03-13 153/week @ 2024-03-20 211/week @ 2024-03-27 154/week @ 2024-04-03 115/week @ 2024-04-10 215/week @ 2024-04-17 158/week @ 2024-04-24 66/week @ 2024-05-01 91/week @ 2024-05-08 95/week @ 2024-05-15 61/week @ 2024-05-22 148/week @ 2024-05-29 125/week @ 2024-06-05 291/week @ 2024-06-12 209/week @ 2024-06-19 315/week @ 2024-06-26

964 每月下载量

Apache-2.0

640KB
13K SLoC

Aerospike Rust客户端 crates-io docs travis appveyor

为 Rust 编写的 Aerospike 客户端库。

此库与 Rust 1.46+ 兼容,并支持以下操作系统:Linux、Mac OS X 和 Windows。当前版本支持 Aerospike v5.6 及更高版本。请查看 变更日志 了解更多详情。

用法

以下是在 Aerospike 数据库中进行 CRUD 操作的非常简单的示例。

#[macro_use]
extern crate aerospike;

use std::env;
use std::time::Instant;

use aerospike::{Bins, Client, ClientPolicy, ReadPolicy, WritePolicy};
use aerospike::operations;

fn main() {
    let cpolicy = ClientPolicy::default();
    let hosts = env::var("AEROSPIKE_HOSTS")
        .unwrap_or(String::from("127.0.0.1:3000"));
    let client = Client::new(&cpolicy, &hosts)
        .expect("Failed to connect to cluster");

    let now = Instant::now();
    let rpolicy = ReadPolicy::default();
    let wpolicy = WritePolicy::default();
    let key = as_key!("test", "test", "test");

    let bins = [
        as_bin!("int", 999),
        as_bin!("str", "Hello, World!"),
    ];
    client.put(&wpolicy, &key, &bins).unwrap();
    let rec = client.get(&rpolicy, &key, Bins::All);
    println!("Record: {}", rec.unwrap());

    client.touch(&wpolicy, &key).unwrap();
    let rec = client.get(&rpolicy, &key, Bins::All);
    println!("Record: {}", rec.unwrap());

    let rec = client.get(&rpolicy, &key, Bins::None);
    println!("Record Header: {}", rec.unwrap());

    let exists = client.exists(&wpolicy, &key).unwrap();
    println!("exists: {}", exists);

    let bin = as_bin!("int", "123");
    let ops = &vec![operations::put(&bin), operations::get()];
    let op_rec = client.operate(&wpolicy, &key, ops);
    println!("operate: {}", op_rec.unwrap());

    let existed = client.delete(&wpolicy, &key).unwrap();
    println!("existed (should be true): {}", existed);

    let existed = client.delete(&wpolicy, &key).unwrap();
    println!("existed (should be false): {}", existed);

    println!("total time: {:?}", now.elapsed());
}

已知限制

以下功能目前在 Aerospike Rust 客户端中尚不支持

  • 使用 Lua 用户定义函数 (UDF) 进行查询聚合。
  • 使用 TLS 进行安全连接。
  • 支持 IPv6。

测试

此库包含了一些测试。这些测试假定在 localhost:3000 上运行一个 Aerospike 集群。要使用不同地址的集群进行测试,请将环境变量 AEROSPIKE_HOSTS 设置为集群主机列表。

运行所有测试用例

$ export AEROSPIKE_HOSTS=127.0.0.1:3000
$ cargo test

aerospike 包启用调试日志

$ RUST_LOG=aerospike=debug cargo test

要启用回溯,请设置环境变量 RUST_BACKTRACE

$ RUST_BACKTRACE=1 cargo test

基准测试

位于 benches 目录中的微基准测试使用 bencher 包,并可以在 Rust 稳定版本上运行

$ export AEROSPIKE_HOSTS=127.0.0.1:3000
$ cargo bench

tools/benchmark 目录下有一个单独的基准测试工具,该工具旨在将数据插入到 Aerospike 服务器集群中并生成负载。

依赖项

~5–6.5MB
~126K SLoC