12 releases (4 stable)

1.3.0 May 1, 2023
1.2.0 Oct 22, 2021
1.0.0 Oct 29, 2020
0.6.0 Sep 11, 2020
0.0.1 Feb 8, 2017

#144 in Database interfaces

Download history 28/week @ 2023-12-14 24/week @ 2023-12-21 24/week @ 2023-12-28 113/week @ 2024-01-04 20/week @ 2024-01-11 43/week @ 2024-01-18 87/week @ 2024-01-25 76/week @ 2024-02-01 64/week @ 2024-02-08 117/week @ 2024-02-15 181/week @ 2024-02-22 118/week @ 2024-02-29 137/week @ 2024-03-07 262/week @ 2024-03-14 169/week @ 2024-03-21 207/week @ 2024-03-28

786 downloads per month

Apache-2.0

640KB
13K SLoC

Aerospike Rust Client crates-io docs travis appveyor

An Aerospike client library for Rust.

This library is compatible with Rust 1.46+ and supports the following operating systems: Linux, Mac OS X, and Windows. The current release supports Aerospike version v5.6 and later. Take a look at the changelog for more details.

Usage:

The following is a very simple example of CRUD operations in an Aerospike database.

#[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());
}

Known Limitations

The following features are not yet supported in the Aerospike Rust client:

  • Query Aggregation using Lua User-Defined Functions (UDF).
  • Secure connections using TLS.
  • IPv6 support.

Tests

This library is packaged with a number of tests. The tests assume that an Aerospike cluster is running at localhost:3000. To test using a cluster at a different address, set the AEROSPIKE_HOSTS environment variable to the list of cluster hosts.

To run all the test cases:

$ export AEROSPIKE_HOSTS=127.0.0.1:3000
$ cargo test

To enable debug logging for the aerospike crate:

$ RUST_LOG=aerospike=debug cargo test

To enable backtraces set the RUST_BACKTRACE environment variable:

$ RUST_BACKTRACE=1 cargo test

Benchmarks

The micro-benchmarks in the benches directory use the bencher crate and can be run on Rust stable releases:

$ export AEROSPIKE_HOSTS=127.0.0.1:3000
$ cargo bench

There is a separate benchmark tool under the tools/benchmark directory that is designed to insert data into an Aerospike server cluster and generate load.

Dependencies

~5–6.5MB
~124K SLoC