Wide-column stores
Huge tables split into partitions by key, with rows kept sorted inside each one, built for heavy writes.
3 technologies on this page ↓How it works
A wide-column store keeps tables of rows, but it isn’t relational. Each row belongs to a partition, chosen by hashing its partition key (Cassandra, ScyllaDB) or by ranges of sorted row keys (Bigtable, HBase), and rows are stored in sorted order, by a clustering column such as a timestamp in Cassandra or by row key in Bigtable. That makes two things cheap: writing, and reading one partition or a slice of it, such as “the last hour of readings from sensor 7”. Rows don’t need the same columns, and a row can have a huge number of them, which is where “wide” comes from. Writes go to a commit log and an in-memory table, which is later flushed to immutable sorted files on disk, so even a delete is a write, called a tombstone. Filtering on other columns or joining tables is slow or unsupported, so you design one table per query and often write the same data to several. The name is loose: Google describes Bigtable as a sorted key-value map, and DB-Engines calls these databases two-dimensional key-value stores.
A filing drawer per customer, with pages kept in date order. Adding a page at the back is instant, and so is pulling last week’s pages; finding every page that mentions a refund means emptying every drawer.
Reach for it when
- Time series, event logs, messages and IoT readings: lots of writes, read back by key and time range
- Very large datasets that must keep accepting writes across racks or regions
- Access patterns you know well enough to design tables around
Think twice when
- Ad-hoc queries, filters on arbitrary columns, or joins
- Small datasets, where the operational work doesn’t pay off
- Updates that need transactions across many rows or partitions
A real example
A fleet-tracking company writes each truck’s GPS position every few seconds to Cassandra, in a table partitioned by truck and day and sorted by time, newest first. Drawing a truck’s route for today reads one partition in order. Finding every truck that passed through a given town, though, needs a second table written with that question in mind.
Technologies
Specific products, and what each does differently.
| Open source | Apache Software Foundation | Apache 2.0 | 2026-10-06 | |
| Open source | Apache Software Foundation | Apache 2.0 | 2026-10-06 | |
| Commercial product | ScyllaDB Ltd. | ScyllaDB Software License Agreement 1.1 (source-available) since 2025.1; AGPL 3.0 up to ScyllaDB Open Source 6.2 | 2026-10-06 |
What each provider calls it
- AWS
- Amazon Keyspaces (Cassandra-compatible); HBase on Amazon EMR
- Google Cloud
- Bigtable, which also offers an HBase-compatible API
- Azure
- Azure Managed Instance for Apache Cassandra; Azure Cosmos DB for Apache Cassandra
- Open source & others
- Apache Cassandra, ScyllaDB (source-available since 2025), Apache HBase
In code · sql
-- CQL: Cassandra, ScyllaDB, Amazon Keyspaces
CREATE TABLE positions (
truck_id text,
day date,
ts timestamp,
lat double,
lon double,
PRIMARY KEY ((truck_id, day), ts) -- partition key, then clustering column
) WITH CLUSTERING ORDER BY (ts DESC);
INSERT INTO positions (truck_id, day, ts, lat, lon)
VALUES ('tr-118', '2026-10-06', '2026-10-06 09:30:05', 59.91, 10.75);
-- one partition, already sorted newest first
SELECT ts, lat, lon FROM positions
WHERE truck_id = 'tr-118' AND day = '2026-10-06'
LIMIT 100;Worth exploring
Often confused with
Where it came from2006–2024
In 2006 Google described Bigtable, the storage system behind web indexing, Google Earth and Google Finance. Its data model was “a sparse, distributed, persistent multi-dimensional sorted map”, indexed by row key, column key and timestamp. Rows were kept in key order and split into ranges called tablets, each served by one machine, with the data files stored in Google’s distributed file system.
Open-source versions followed quickly. HBase, begun at Powerset in 2007, rebuilt Bigtable on Hadoop’s HDFS. Cassandra, built at Facebook for inbox search and open-sourced in 2008, took Bigtable’s column families and log-structured storage but spread data the way Amazon’s Dynamo did, with no master, keys hashed around a ring and every replica accepting writes. One of its two authors, Avinash Lakshman, had co-written the Dynamo paper. Both projects became top-level Apache projects in 2010.
Cassandra’s interface then moved closer to SQL. CQL, a SQL-like language, gave tables declared columns, a partition key and clustering columns, so a partition holds many rows sorted by the clustering columns. ScyllaDB rewrote Cassandra in C++ from 2015, and the clouds now sell managed versions: Bigtable itself, Amazon Keyspaces since 2020, and Azure’s managed Cassandra.
Why it’s built this way
- Keep rows sorted by key
- Bigtable stored rows in key order so related data sat together and could be read as a range. Web pages were stored under reversed host names, such as
com.google.maps/index.html, so one domain’s pages were neighbours. - Append writes, sort them later
- Writing to a commit log and memory, then flushing immutable sorted files, turns random writes into sequential ones, so heavy write loads stay cheap. Reads and background compaction pay for it later.
- Every replica accepts writes (Cassandra)
- Facebook’s inbox search had to take billions of writes a day and replicate across data centers where, at that scale, components fail continuously. So Cassandra borrowed Dynamo’s masterless replication instead of Bigtable’s single server per range.
Timeline
- 2006
Google publishes the Bigtable paper
- 2007
HBase code is posted and ships with Hadoop 0.15.0
- 2008
Facebook open-sources Cassandra
- 2010
Cassandra and HBase become top-level Apache projects
- 2015
ScyllaDB’s first release, a C++ rewrite of Cassandra
- 2020
Amazon Keyspaces (for Apache Cassandra) becomes generally available
- 2024
Cassandra 5.0 adds Storage Attached Indexes for non-key columns
- Chang et al.: Bigtable, a distributed storage system for structured data (OSDI 2006)
- Apache JIRA: HADOOP-1045, Code for HBase (Mike Cafarella, February 2007)
- Wikipedia: Apache HBase (began at Powerset)
- Hadoop 0.15.0 release (October 2007)
- Avinash Lakshman, Engineering at Meta: Cassandra, a structured storage system on a P2P network (Aug 2008)
- Lakshman and Malik: Cassandra, a decentralized structured storage system (LADIS 2009)
- Werner Vogels: Amazon’s Dynamo (authors of the 2007 paper)
- ASF board minutes, February 17, 2010: Establish the Apache Cassandra Project
- ASF board minutes, April 21, 2010: Establish the Apache HBase Project
- scylladb/scylladb on GitHub: tag scylla-0.10 (October 2015)
- AWS What’s New: Amazon Keyspaces (for Apache Cassandra) is now generally available (Apr 2020)
- Apache Cassandra blog: Announcing Apache Cassandra 5.0 (Sept 2024)
Sources14
- DB-Engines: Wide column stores (two-dimensional key-value stores)
- Google Cloud: Bigtable overview (each table is a sorted key-value map)
- Google Cloud: Bigtable and the HBase API
- Apache Cassandra: Cassandra basics (partitions and tokens)
- Cassandra docs: CQL data definition (partition key, clustering columns, CLUSTERING ORDER)
- Cassandra docs: Dynamo (replication, consistency levels, hinted handoff)
- Cassandra docs: Storage engine (commit log, memtables, SSTables)
- Cassandra docs: Tombstones
- Amazon Keyspaces Developer Guide: What is Amazon Keyspaces?
- Amazon EMR Release Guide: Apache HBase
- Microsoft Learn: Azure Managed Instance for Apache Cassandra
- Microsoft Learn: What is Azure Cosmos DB for Apache Cassandra?
- Dor Laor, ScyllaDB blog: Why we’re moving to a source available license (Dec 2024)
- Hadoop docs: HDFS architecture