CassandraClient 是一个用 Swift 编写的 Cassandra 客户端。该客户端基于 DataStax Cassandra C++ Driver,并用 Swift 友好的 API 和数据结构对其进行了封装。
CassandraClient API 目前公开了基于 SwiftNIO 的 Futures,以简化与基于 SwiftNIO 的服务器的集成。基于 Swift 并发的 API 也可在 Swift 5.5 及更高版本中使用。
var configuration = CassandraClient.Configuration(...)
let cassandraClient = CassandraClient(configuration: configuration)
客户端默认建立了一个会话(惰性加载),因此可以直接使用它来对配置的键空间执行查询
let result = try await cassandraClient.query(...)
客户端在不再需要时必须显式关闭
try cassandraClient.shutdown()
let session = cassandraClient.makeSession(keyspace: <KEYSPACE>)
let result = try await session.query(...)
会话在不再需要时必须显式关闭
try session.shutdown()
您也可以创建一个会话并传入一个闭包,该闭包将在退出时自动释放资源
try await cassandraClient.withSession(keyspace: <KEYSPACE>) { session in
...
}
try await cassandraClient.run("create table ...")
或者在会话级别
try await session.run("create table ...")
返回模型对象,假设 Model: Codable
let result: [Model] = try await cassandraClient.query("select * from table ...")
let result: [Model] = try await session.query("select * from table ...")
或使用对行的自由转换
let values = try await cassandraClient.query("select * from table ...") { row in
row.column(<COLUMN_NAME>).int32
}
let values = try await session.query("select * from table ...") { row in
row.column(<COLUMN_NAME>).int32
}
// `rows` is a sequence that one needs to iterate on
let rows: Rows = try await cassandraClient.query("select * from table ...")
// `rows` is a sequence that one needs to iterate on
let rows: Rows = try await session.query("select * from table ...")
var configuration = CassandraClient.Configuration(...)
let cassandraClient = CassandraClient(configuration: configuration)
客户端默认建立了一个会话(惰性加载),因此可以直接使用它来对配置的键空间执行查询
let resultFuture = cassandraClient.query(...)
客户端在不再需要时必须显式关闭
try cassandraClient.shutdown()
let session = cassandraClient.makeSession(keyspace: <KEYSPACE>)
let resultFuture = session.query(...)
会话在不再需要时必须显式关闭
try session.shutdown()
您也可以创建一个会话并传入一个闭包,该闭包将在退出时自动释放资源
try cassandraClient.withSession(keyspace: <KEYSPACE>) { session in
...
}
let voidFuture = cassandraClient.run("create table ...")
或者在会话级别
let voidFuture = session.run("create table ...")
返回模型对象,假设 Model: Codable
cassandraClient.query("select * from table ...").map { result: [Model] in
...
}
session.query("select * from table ...").map { result: [Model] in
...
}
或使用对行的自由转换
cassandraClient.query("select * from table ...") { row in
row.column(<COLUMN_NAME>).int32
}.map { value in
...
}
session.query("select * from table ...") { row in
row.column(<COLUMN_NAME>).int32
}.map { value in
...
}
cassandraClient.query("select * from table ...").map { rows: Rows in
// `rows` is a sequence that one needs to iterate on
rows.map { row in
...
}
}
session.query("select * from table ...").map { rows: Rows in
// `rows` is a sequence that one needs to iterate on
rows.map { row in
...
}
}
该库依赖于 DataStax driver 和 libuv,它们作为 git 子模块包含在内。 它们都有在 Package.swift
中排除的源文件。
git 子模块位于 Sources/CDataStaxDriver/datastax-cpp-driver
下。 要更新,请执行 git fetch
,然后检出所需的 tag/release。 Driver 的配置文件位于 Sources/CDataStaxDriver/extras
中。
git 子模块位于 Sources/Clibuv/libuv
下。 要更新,请执行 git fetch
,然后检出所需的 tag/release。 请注意,Sources/Clibuv
中的 include
和 uv.h
被符号链接到 Sources/Clibuv/libuv
中的相应目录/文件。
该库的测试需要运行一个 Cassandra 数据库。
使用 Docker (大约需要 1 分钟才能准备好接受连接)
$ docker run --name cassandra -p 127.0.0.1:9042:9042 -d cassandra:3