Spanner vs Bigtable
- 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 , 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.
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.