26 个版本 (稳定)

8.1.3 2024 年 4 月 25 日
8.1.2 2023 年 10 月 2 日
8.1.1 2023 年 5 月 11 日
8.0.0-beta.12023 年 3 月 6 日
1.0.0 2020 年 11 月 17 日

数据库接口 中排名第 158

Download history 1557/week @ 2024-05-03 3866/week @ 2024-05-10 1999/week @ 2024-05-17 1074/week @ 2024-05-24 1250/week @ 2024-05-31 1722/week @ 2024-06-07 2399/week @ 2024-06-14 3056/week @ 2024-06-21 1999/week @ 2024-06-28 2340/week @ 2024-07-05 5067/week @ 2024-07-12 2512/week @ 2024-07-19 3192/week @ 2024-07-26 4805/week @ 2024-08-02 5100/week @ 2024-08-09 4504/week @ 2024-08-16

每月下载量 17,953
用于 cqlmig-cdrs-tokio

MIT/Apache 协议

750KB
19K SLoC

CDRS tokio

crates.io version build status

CDRS tokio - async Apache Cassandra driver using tokio

CDRS 是一个专为生产环境准备的、纯 Rust 编写的 Apache Cassandra driver。它专注于提供高可配置性,以适应各种规模的使用场景,同时利用 Rust 的安全和性能。

特性

  • 异步 API;
  • TCP/TLS 连接 (rustls);
  • 拓扑感知的动态和可配置负载均衡;
  • 可配置的连接策略和池;
  • 可配置的猜测执行;
  • LZ4、Snappy 压缩;
  • Cassandra 到 Rust 数据序列化/反序列化,支持自定义类型;
  • 可插拔的认证策略;
  • ScyllaDB 支持;
  • 服务器事件监听;
  • 支持多个 CQL 版本 (3, 4, 5),完整规范实现;
  • 查询跟踪信息;
  • 预编译语句;
  • 查询分页;
  • 批处理语句;
  • 可配置的重试和重新连接策略;
  • 支持交错查询;
  • 支持 Yugabyte YCQL JSONB;
  • 支持 beta 协议使用;

性能

由于 CDRS 的高度可配置性,性能会根据使用场景而有所不同。以下基准测试是在 2021 年 3 月 12 日各自的库的最新版本(除 cassandra-cpp: 2.16.0)和协议版本 4 下进行的。

  • cdrs-tokio-large-pool - CDRS 的节点连接池等于物理 CPU 核心的两倍
  • cdrs-tokio-small-pool - CDRS 的每个节点一个连接
  • scylladb-rust-large-pool - scylla crate 的节点连接池等于物理 CPU 核心的两倍
  • scylladb-rust-small-pool - scylla crate 的每个节点一个连接
  • cassandra-cpp - Rust 绑定 Datastax C++ 驱动程序,使用 Tokio 在多个线程上运行
  • gocql - 使用 Go 编写的驱动程序
insert benchmark select benchmark mixed benchmark

了解给定的用例后,CDRS 可以优化以实现峰值性能。

文档和示例

入门指南

此示例配置了一个由单个节点组成的集群,未进行身份验证,并使用轮询负载均衡。其他选项保持为默认设置。

use cdrs_tokio::cluster::session::{TcpSessionBuilder, SessionBuilder};
use cdrs_tokio::cluster::NodeTcpConfigBuilder;
use cdrs_tokio::load_balancing::RoundRobinLoadBalancingStrategy;
use cdrs_tokio::query::*;

#[tokio::main]
async fn main() {
    let cluster_config = NodeTcpConfigBuilder::new()
        .with_contact_point("127.0.0.1:9042".into())
        .build()
        .await
        .unwrap();
    let session = TcpSessionBuilder::new(RoundRobinLoadBalancingStrategy::new(), cluster_config)
        .build()
        .await
        .unwrap();

    let create_ks = "CREATE KEYSPACE IF NOT EXISTS test_ks WITH REPLICATION = { \
                     'class' : 'SimpleStrategy', 'replication_factor' : 1 };";
    session
        .query(create_ks)
        .await
        .expect("Keyspace create error");
}

许可协议

本项目许可协议为以下之一

任选其一。

依赖项

~9–20MB
~277K SLoC