32-bit vs 64-bit
    Annotations vs Decorators
    BigQuery vs Bigtable
    Block Storage vs File Storage vs Object Storage
    C vs C++
    Canvas vs SVG
    Constructor vs Init() vs Factory
    Containers vs Virtual Machines (VMs)
    DOM vs Virtual DOM vs Shadow DOM
    DQL vs DDL vs DCL vs DML
    Dagger vs Guice
    Data Mining vs Machine Learning vs Artificial Intelligence vs Data Science
    Flux vs Redux
    GCP API Gateway vs Cloud Endpoint
    GCP Cloud Run vs Cloud Functions vs App Engine
    GCP DataFlow vs Dataproc
    Google Analytics 4 vs Universal Analytics
    Google Internal vs Open Source
    HEIC vs HEIF vs HEVC vs JPEG
    Java vs C++
    Jetty vs Netty
    Kotlin vs Java
    LLVM vs JVM
    Linux vs BSD
    Microcontroller vs Microprocessor vs Computer
    Node.js vs Erlang
    POSIX vs SUS vs LSB
    Pass-by-value vs Pass-by-reference
    Proto2 vs Proto3
    PubSub vs Message Queue
    REST vs SOAP
    React vs Flutter vs Angular
    Rust vs C++
    SLI vs SLO vs SLA
    SRAM vs DRAM
    SSD vs HDD
    Software Engineer vs Site Reliability Engineer
    Spanner vs Bigtable
    Stack based VM vs Register based VM
    Stateless vs Stateful
    Static Site Generation vs Server-side Rendering vs Client-side Rendering
    Strong Consistency vs Eventual Consistency
    Subroutines vs Coroutines vs Generators
    Symlinks vs Hard Links
    Tensorflow vs PyTorch
    Terminal vs Shell
    Vi vs Vim vs gVim vs Neovim
    WAL vs rollback journal
    gtag vs Tag Manager
    stubs vs mocks vs fakes

Spanner vs Bigtable

Updated: 2022-02-25



  • Both from Google.
  • Both used internally for the largest Google services.
  • Both offeredd on GCP (Cloud Spanner and Cloud Bigtable).
  • Both use SSTable under the hood. Spanner is replace SSTable with Ressi [1], the next generation storage format.


  • Bigtable is a NoSQL, wide column store. Spanner is a scalable relational (SQL) database.
  • Index: Bigtable has only one index (the row key) per table. Spanner supports secondary indexes.
  • Consistency: Spanner has consistent, synchronous replication. Bigtable offers asynchronous replication with eventual consistency. In addition, Spanner supports dynamic replica placement: it automatically places data according to users' expressed placement.
  • Spanner supports distributed transactions, which can happen across rows, tables and databases. In Bigtable, transactions only happen within a single row.
  • Spanner databases are defined by strongly typed schemas, which are defined using Spanner's Schema Definition Language. In Bigtable, schemas are not typed.
  • Spanner offers native SQL Query and Read APIs.

For very high write workloads, Bigtable’s weaker consistency semantics allow it to perform aggressive batching, providing a throughput advantage. However, Bigtable’s write efficiency fades as more reads are added to the mix and batching opportunities diminish.

Why Spanner

Previously you need to choose between the horizontal scalability of NoSQL (like Bigtable) and the ACID guarantees of traditional SQL systems (like MySQL or Postgres). Spanner is trying to provide both. Spanner may perform slightly worse and cost more than BigTable.

Read More