#google-cloud #spanner #gcp

google-cloud-spanner

Google Cloud Platform spanner 客户端库

41 个版本 (破坏性)

0.30.0 2024年7月12日
0.27.0 2024年5月7日
0.25.0 2023年12月28日
0.24.0 2023年10月15日
0.2.0 2021年11月28日

#1965 in 网页编程

Download history • Rust 包仓库 1828/week @ 2024-04-26 • Rust 包仓库 1588/week @ 2024-05-03 • Rust 包仓库 2323/week @ 2024-05-10 • Rust 包仓库 2843/week @ 2024-05-17 • Rust 包仓库 1097/week @ 2024-05-24 • Rust 包仓库 1198/week @ 2024-05-31 • Rust 包仓库 1914/week @ 2024-06-07 • Rust 包仓库 1652/week @ 2024-06-14 • Rust 包仓库 2753/week @ 2024-06-21 • Rust 包仓库 719/week @ 2024-06-28 • Rust 包仓库 203/week @ 2024-07-05 • Rust 包仓库 358/week @ 2024-07-12 • Rust 包仓库 239/week @ 2024-07-19 • Rust 包仓库 263/week @ 2024-07-26 • Rust 包仓库 211/week @ 2024-08-02 • Rust 包仓库 152/week @ 2024-08-09 • Rust 包仓库

905 每月下载量
用于 2 crates

MIT 许可证

8MB
144K SLoC

Bazel 112K SLoC // 0.1% comments • Rust 包仓库 Rust 32K SLoC // 0.0% comments • Rust 包仓库 Shell 181 SLoC // 0.3% comments • Rust 包仓库 Go 148 SLoC // 0.2% comments • Rust 包仓库 Forge Config 1 SLoC // 0.8% comments • Rust 包仓库

google-cloud-spanner

Google Cloud Platform spanner 库。

crates.io

安装

[dependencies]
google-cloud-spanner = "version"

快速入门

创建 Client 并调用事务 API,与 Google Cloud Go 相同。

 use google_cloud_spanner::client::Client;
 use google_cloud_spanner::mutation::insert;
 use google_cloud_spanner::statement::Statement;
 use google_cloud_spanner::value::CommitTimestamp;
 use google_cloud_spanner::client::Error;

 #[tokio::main]
 async fn main() -> Result<(), Error> {

     const DATABASE: &str = "projects/local-project/instances/test-instance/databases/local-database";

     // Create spanner client
     let config = ClientConfig::default().with_auth().await.unwrap();
     let mut client = Client::new(DATABASE, config).await.unwrap();

     // Insert
     let mutation = insert("Guild", &["GuildId", "OwnerUserID", "UpdatedAt"], &[&"guildId", &"ownerId", &CommitTimestamp::new()]);
     let commit_timestamp = client.apply(vec![mutation]).await?;

     // Read with query
     let mut stmt = Statement::new("SELECT GuildId FROM Guild WHERE OwnerUserID = @OwnerUserID");
     stmt.add_param("OwnerUserID",&"ownerId");
     let mut tx = client.single().await?;
     let mut iter = tx.query(stmt).await?;
     while let Some(row) = iter.next().await? {
         let guild_id = row.column_by_name::<String>("GuildId");
     }

     // Remove all the sessions.
     client.close().await;
     Ok(())
 }

性能

24小时负载测试结果。

指标 此库 Google Cloud Go
RPS 438.4 443.4
使用的 vCPU 0.37 ~ 0.42 0.65 ~ 0.70

测试条件

  • 2.0 vCPU GKE Autopilot Pod
  • 1 个节点 spanner 数据库服务器
  • 100 个用户
  • 这里 是负载测试的应用程序。

依赖项

~16–30MB
~562K SLoC