gcloud-spanner

Crates.iogcloud-spanner
lib.rsgcloud-spanner
version
sourcesrc
created_at2025-02-07 00:31:13.525286+00
updated_at2025-04-01 04:18:24.490775+00
descriptionGoogle Cloud Platform spanner client library.
homepage
repositoryhttps://github.com/yoshidan/google-cloud-rust/tree/main/spanner
max_upload_size
id1546338
Cargo.toml error:TOML parse error at line 18, column 1 | 18 | autolib = false | ^^^^^^^ unknown field `autolib`, expected one of `name`, `version`, `edition`, `authors`, `description`, `readme`, `license`, `repository`, `homepage`, `documentation`, `build`, `resolver`, `links`, `default-run`, `default_dash_run`, `rust-version`, `rust_dash_version`, `rust_version`, `license-file`, `license_dash_file`, `license_file`, `licenseFile`, `license_capital_file`, `forced-target`, `forced_dash_target`, `autobins`, `autotests`, `autoexamples`, `autobenches`, `publish`, `metadata`, `keywords`, `categories`, `exclude`, `include`
size0
Naohiro Yoshida (yoshidan)

documentation

https://docs.rs/gcloud-spanner/latest/gcloud_spanner/

README

google-cloud-spanner

Google Cloud Platform spanner library.

crates.io

Installation

[dependencies]
google-cloud-spanner = { package="gcloud-spanner", version="1.0.0" }

Quickstart

Create Client and call transaction API same as 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(())
 }

Related project

Performance

Result of the 24 hours Load Test.

Metrics This library Google Cloud Go
RPS 438.4 443.4
Used vCPU 0.37 ~ 0.42 0.65 ~ 0.70

Test condition

  • 2.0 vCPU GKE Autopilot Pod
  • 1 Node spanner database server
  • 100 Users
  • Here is the application for Load Test.
Commit count: 0

cargo fmt