#cassandra #cql #binding #client #database-driver #api-bindings

cassandra-cpp

一个基于DataStax C++驱动程序的Cassandra CQL驱动程序,旨在提高性能和功能

25个版本 (8个稳定版)

3.0.2 2024年6月18日
3.0.1 2024年2月29日
2.0.1 2023年6月8日
2.0.0 2023年3月13日
0.8.2 2017年6月29日

#40数据库接口

Download history 458/week @ 2024-04-23 497/week @ 2024-04-30 344/week @ 2024-05-07 393/week @ 2024-05-14 273/week @ 2024-05-21 362/week @ 2024-05-28 422/week @ 2024-06-04 412/week @ 2024-06-11 474/week @ 2024-06-18 306/week @ 2024-06-25 312/week @ 2024-07-02 379/week @ 2024-07-09 270/week @ 2024-07-16 395/week @ 2024-07-23 402/week @ 2024-07-30 144/week @ 2024-08-06

每月下载量 1,265次

Apache-2.0

305KB
6K SLoC

Build Status Current Version License

cassandra-cpp

这是一个维护的Rust项目,将DataStax cpp驱动程序在https://github.com/datastax/cpp-driver/中以相对合理的方式封装。它最初是https://github.com/tupshin/cassandra-rs的分支,但现在已经不再维护。

它是原始驱动绑定crate cassandra-cpp-sys的封装。

文档(crates.io).

入门

本地环境

为了使这个crate工作,您必须首先安装一个足够新的datastax-cpp驱动程序版本(至少2.16)。按照cpp驱动程序文档中的步骤进行操作。大多数平台都提供了预构建的软件包。

确保驱动程序(特别是libcassandra_static.alibcassandra.so)位于您的/usr/local/lib64/目录中

Floki

或者,您可以使用Floki实用程序为您创建Docker化编译环境。安装Floki后,只需在项目根目录中输入

floki

您将进入一个Rust编译环境;像往常一样输入cargo build来构建驱动程序。

文档

请参阅API文档

Cassandra查询语言(CQL)的文档可能很有用。

由于这个crate在DataStax驱动程序周围提供了一个相对较薄的封装,您还可能发现DataStax的文档API文档很有用。

示例

关于一个简单的示例,请参阅simple.rs

项目还包括其他示例,位于testsexamples目录中。

借用的迭代器API(版本3.0)

版本3.0修复了先前API中的一致性问题。在底层的Cassandra驱动程序中,当调用next()时,迭代器将使当前项无效,但在3版本之前的Rust绑定中没有体现这一点。

为了处理这个问题,各种迭代器(ResultIteratorRowIteratorMapIteratorSetIteratorFieldIteratorUserTypeIteratorKeyspaceIteratorFunctionIteratorAggregateIteratorTableIteratorColumnIterator)不再实现std::iter::Iterator。相反,由于这是一个借用迭代器,这些类型都实现了新的LendingIterator特质。我们之所以自己定义它,是因为目前还没有广泛使用的crate实现了它。

要升级,请更改

for row in result {
  // ... do something with row ...
}

let mut iter = result.iter();
while let Some(row) = iter.next() {
  // ... do something with row ...
}

中间变量iter是必要的,否则您将无限期地访问结果的第一行!

其他更改

  • 许多类型现在需要生命周期参数,例如,Value现在是Value<'a>ResultIterator现在是ResultIterator<'a>。在几乎所有情况下,您都可以省略它,并且Rust会为您推断。如果不可以,您通常可以编写Value<'_>以让Rust为您处理。
  • RowIterator不再实现Display(因为它将消耗迭代器);然而Row实现了。
  • TupleIterator已被移除——由于您使用集合迭代器(Value::get_set())来处理列表、集合和元组,所以它从未被使用过。
  • ConstDataType::sub_data_by_nameConstDataType::sub_type_name现在接受&self而不是显式参数。
  • FunctionMeta::argument现在返回名称和类型,而不仅仅是()

新会话API(版本2.0)

版本2.0引入了一个新的更安全的API。Statement(以及PreparedStatementBatch)现在与特定的Session相关联。此外,为了支持现在无处不在的.await,移除了旧的.wait() API。

  • 该crate的函数已变为async,意味着它们只能作为异步工作流的一部分来调用。要使用这些函数,您可以从异步函数内部使用.await操作符调用它们,或者您可以使用来自tokio runtimeblock_on方法从同步上下文调用它们。

  • stmt!Statement::new方法已被替换为Session::statement()方法,该方法记录与会话的关联。只需更新您的代码以使用新方法代替宏,以继续使用其功能。

  • 语句通过.execute()执行,它消耗语句:您不能执行相同的语句两次;如果需要这样做,请重新创建语句。

  • 移除了Batch::new,改用Session::batch

  • 出现了一个新的错误BatchSessionMismatch,如果您尝试将来自不同Session的语句添加到同一个Batch中。

  • 连接方法已整理。由于Cluster::connect现在是异步的,因此移除了Cluster::connect_asyncSession::connectSession::connect_keyspace已被移除 - 使用Cluster::connectCluster::connect_keyspace代替。

  • Session::close(允许等待会话中的飞行请求完成)已被移除,因为它不易安全实现。此功能不再受支持。

  • Cluster::set_ssl现在消耗其参数,以提高安全性。

未来(版本 0.15)

从版本 0.15 开始,此crate使用std::future,允许您的代码使用futures:0.3async/await等。

先前版本(最高 0.14)使用futures:0.1。您可以选择保持 0.14 流,更新您的代码以使用std::future,或使用兼容层(例如,futures::compat)。

从版本 0.8 迁移

版本 0.10 中API发生了重大变化。(版本 0.9 被跳过,以与cassandra-cpp-sys版本号保持一致。)有关主要更改的摘要,请参阅CHANGELOG

功能标志

这个包包含功能标志 early_access_min_tls_version,它允许您针对包含 cass_ssl_set_min_protocol_version 方法的 DataStax 驱动程序的版本进行构建,如此 PR 中定义。您必须安装支持此功能的驱动程序版本到本地,才能使用此功能标志进行编译(和运行)。

当此功能在主驱动程序中可用时,此标志将设置为不执行任何操作并弃用,并将函数添加到主库中。然后将在下一个重大更改中弃用此标志。

许可证

此代码是开源的,根据LICENSE中描述的 Apache 许可证版本 2.0 许可。

贡献

有关如何为此项目做出贡献的详细信息,请参阅CONTRIBUTING.md

开发

此包由 GitHub Actions 定期构建;要查看最新构建的详细信息,请点击此页顶部的“构建”徽章。

您必须在自己的系统上安装 DataStax 驱动程序才能构建此包。

单元测试假定 Cassandra 在本地主机上运行,并且可以通过标准端口访问。实现此目的的最简单方法是使用 Docker 和标准 Cassandra 映像:

docker pull cassandra
docker run -d --net=host --name=cassandra cassandra

您应该以单线程运行它们以避免可怕的 org.apache.cassandra.exceptions.ConfigurationException: 列表族 ID 不匹配 错误。测试共享一个键空间和表,因此如果并行运行则会相互干扰。

cargo test -- --test-threads 1

完成时请记得销毁容器

docker stop cassandra
docker rm cassandra

历史

此项目是从cassandra 分支的,该项目已不再维护。

依赖关系

~5–11MB
~128K SLoC