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 网页编程

Download history 1/week @ 2024-03-26 10/week @ 2024-04-02

60 每月下载量

MIT 许可证

410KB
9K SLoC

MIT licensed Join the chat at https://gitter.im/durch/rust-bigtable

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_rowswrite_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