google-cloud-spanner

Google Cloud Platform spanner library.

crates.io

Installation

[dependencies] google-cloud-spanner = <version> google-cloud-default = { version = <version>, features = ["spanner"] }

Quickstart

Create Client and call transaction API same as Google Cloud Go.

```rust use googlecloudspanner::client::Client; use googlecloudspanner::mutation::insert; use googlecloudspanner::statement::Statement; use googlecloudspanner::reader::AsyncIterator; use googlecloudspanner::value::CommitTimestamp; use googlecloudspanner::client::Error; use googleclouddefault::WithAuthExt;

#[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.