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 在 数据库接口
每月下载量 1,265次
305KB
6K SLoC
cassandra-cpp
这是一个维护的Rust项目,将DataStax cpp驱动程序在https://github.com/datastax/cpp-driver/中以相对合理的方式封装。它最初是https://github.com/tupshin/cassandra-rs的分支,但现在已经不再维护。
它是原始驱动绑定crate cassandra-cpp-sys的封装。
入门
本地环境
为了使这个crate工作,您必须首先安装一个足够新的datastax-cpp驱动程序版本(至少2.16)。按照cpp驱动程序文档中的步骤进行操作。大多数平台都提供了预构建的软件包。
确保驱动程序(特别是libcassandra_static.a
和libcassandra.so
)位于您的/usr/local/lib64/
目录中
Floki
或者,您可以使用Floki实用程序为您创建Docker化编译环境。安装Floki后,只需在项目根目录中输入
floki
您将进入一个Rust编译环境;像往常一样输入cargo build
来构建驱动程序。
文档
请参阅API文档。
Cassandra查询语言(CQL)的文档可能很有用。
由于这个crate在DataStax驱动程序周围提供了一个相对较薄的封装,您还可能发现DataStax的文档和API文档很有用。
示例
关于一个简单的示例,请参阅simple.rs
。
项目还包括其他示例,位于tests
和examples
目录中。
借用的迭代器API(版本3.0)
版本3.0修复了先前API中的一致性问题。在底层的Cassandra驱动程序中,当调用next()
时,迭代器将使当前项无效,但在3版本之前的Rust绑定中没有体现这一点。
为了处理这个问题,各种迭代器(ResultIterator
、RowIterator
、MapIterator
、SetIterator
、FieldIterator
、UserTypeIterator
、KeyspaceIterator
、FunctionIterator
、AggregateIterator
、TableIterator
、ColumnIterator
)不再实现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_name
和ConstDataType::sub_type_name
现在接受&self
而不是显式参数。FunctionMeta::argument
现在返回名称和类型,而不仅仅是()
。
新会话API(版本2.0)
版本2.0引入了一个新的更安全的API。Statement
(以及PreparedStatement
和Batch
)现在与特定的Session
相关联。此外,为了支持现在无处不在的.await
,移除了旧的.wait()
API。
-
该crate的函数已变为
async
,意味着它们只能作为异步工作流的一部分来调用。要使用这些函数,您可以从异步函数内部使用.await操作符调用它们,或者您可以使用来自tokio runtime的
block_on
方法从同步上下文调用它们。 -
宏
stmt!
和Statement::new
方法已被替换为Session::statement()
方法,该方法记录与会话的关联。只需更新您的代码以使用新方法代替宏,以继续使用其功能。 -
语句通过
.execute()
执行,它消耗语句:您不能执行相同的语句两次;如果需要这样做,请重新创建语句。 -
移除了
Batch::new
,改用Session::batch
。 -
出现了一个新的错误
BatchSessionMismatch
,如果您尝试将来自不同Session
的语句添加到同一个Batch
中。 -
连接方法已整理。由于
Cluster::connect
现在是异步的,因此移除了Cluster::connect_async
。Session::connect
和Session::connect_keyspace
已被移除 - 使用Cluster::connect
和Cluster::connect_keyspace
代替。 -
Session::close
(允许等待会话中的飞行请求完成)已被移除,因为它不易安全实现。此功能不再受支持。 -
Cluster::set_ssl
现在消耗其参数,以提高安全性。
未来(版本 0.15)
从版本 0.15 开始,此crate使用std::future
,允许您的代码使用futures:0.3
、async/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