15 个版本
0.5.0 | 2019 年 12 月 9 日 |
---|---|
0.4.0 | 2017 年 10 月 27 日 |
0.3.3 | 2017 年 3 月 27 日 |
0.2.21 | 2017 年 3 月 13 日 |
0.1.6 | 2017 年 1 月 18 日 |
#2403 in 网页编程
60 每月下载量
410KB
9K SLoC
rust-bigtable [文档]
Rust 库,用于与 Google Bigtable 数据 API 交互
简介
与 Cloud Bigtable 的接口,支持所有 数据 API 方法。
- CheckAndMutateRow
- MutateRow
- MutateRows
- ReadModifyWriteRow
- ReadRows
- SampleRowKeys
包括对 JWT 认证 的支持
工作原理
最初计划是完全使用 grpc
通过 http/2
,不幸的是 Rust 支持尚不可用,因此采取了中间方案 :).
请求对象是 protobuf
消息,使用从 Google 可用的 proto
定义生成。所有配置都通过这种方式生成的非常友好的接口完成。然后,这些消息被透明地转换为 json
,并发送到预定义的 google.api.http
端点,也在此处定义 这里。响应作为 serde_json::Value 返回。
理论上,这应该能够在它变得可行时轻松升级到完全使用 grpc
通过 http/2
,唯一剩下的工作就是使用正确的返回类型,这些返回类型也作为 protobuf
消息提供。
配置
您可以提供从 Google Cloud Console 获得的 json
服务帐户凭证或 pem
格式的私钥文件,以及具有适当作用域的 Google Cloud 服务帐户(作用域由 goauth 处理,作为认证的一部分),
用法
在您的 Cargo.toml 中
[dependencies]
bigtable = '0.3'
高级封装器(wraps
)
这里和更高版本的封装器可用于读取和写入行,因此不需要手动构建 protobufs
。写入也可以用于更新,但还不够稳健,即将推出 :).
读取和写入
读取包装器允许简单地限制行数,它使用底层的ReadRows
方法。
提供了两种写入策略,分别是bulk_write_rows
和write_rows
。其中bulk_write_rows
首先收集所有写入操作,然后只发送一个请求,底层数方法是MutateRows
,这可以显著提高写入吞吐量。write_rows
则对每一行写入数据发送一个请求,底层数方法是ReadModifyWriteRow
。
extern crate bigtable as bt;
use bt::utils::*;
use bt::wraps;
const TOKEN_URL: &'static str = "https://www.googleapis.com/oauth2/v4/token";
const ISS: &'static str = "[email protected]";
const PK: &'static str = "pk_for_the_acc_above.pem";
fn read_rows(limit: i64) -> Result<(serde_json::Value), BTErr> {
let token = get_auth_token(TOKEN_URL, ISS, PK)?;
let table = Default::default();
wraps::read_rows(table, &token, Some(limit))
}
fn write_rows(n: usize, bulk: bool) -> Result<(), BTErr> {
let mut rows: Vec<wraps::Row> = vec!(wraps::Row::default()); // put some real data here
let token = get_auth_token(TOKEN_URL, ISS, PK)?;
let table = Default::default(); // Again use a real table here
if bulk {
let _ = wraps::bulk_write_rows(&mut rows, &token, table);
} else {
let _ = wraps::write_rows(&mut rows, &token, table);
}
Ok(())
}
依赖项
~28–38MB
~704K SLoC