Time-series databases
A database shaped for measurements stamped with time.
13 technologies on this page ↓How it works
Time-series databases are built for data that arrives as timestamp, source and value, and is almost always appended rather than updated. They split data into time chunks, compress old chunks heavily, and keep pre-computed rollups so questions like “hourly average for the last 30 days” stay fast. Retention policies drop or downsample old data automatically, which also stops queries that forget a time range from growing without end.
A ship’s logbook with a fresh page every day. Recent pages lie open on the desk; old volumes get summarized and shelved.
Reach for it when
- IoT and sensor telemetry, infrastructure metrics, market ticks
- Dashboards over recent windows plus long-term trends
- High ingest rates where rows are rarely changed
Think twice when
- Transactional business data with frequent updates
- Data you don’t mainly query by time
A real example
Pressure readings from thousands of wells land every few seconds in a TimescaleDB hypertable. The live chart reads the last 15 minutes, and a continuous aggregate keeps hourly averages, so a one-year chart reads 8,760 rows instead of millions.
Technologies
Specific products, and what each does differently.
Standalone time-series databases
QuestDBOpen sourceA columnar time-series database in Java, C++ and Rust that ingests millions of rows a second and answers time-series SQL, with old partitions kept as Parquet.
TDengineOpen sourceA clustered time-series database for IoT and industrial data that gives every device its own table, grouped under “supertables” with tags.Apache IoTDBOpen sourceAn Apache time-series database for industrial IoT that stores everything in its own open file format, TsFile, and lets you model devices as a tree of paths or as SQL tables.+1 TimechoDBBuilt on PostgreSQL
Tiger LakeBetaCommercialTiger Cloud’s built-in Iceberg connector, in public beta: it copies a Postgres table or TimescaleDB hypertable into Apache Iceberg, then keeps it current from the write-ahead log.Mainly LakehousesManaged services
| Standalone time-series databases | Open source | InfluxData Inc. | MIT or Apache 2.0 (InfluxDB 3 Core); MIT (1.x and 2.x); InfluxDB 3 Enterprise and InfluxDB Cloud are proprietary | 2026-10-06 | |
QuestDB | Standalone time-series databases | Open source | QuestDB Inc. | Apache 2.0 (open source; AGPLv3 from 2016 to 2019); QuestDB Enterprise is proprietary | 2026-10-06 |
TDengine | Standalone time-series databases | Open source | TAOS Data (TDengine) | AGPL-3.0 (TDengine TSDB open source); TSDB-Enterprise, IDMP and TDengine Cloud are commercial | 2026-10-06 |
| Apache IoTDB | Standalone time-series databases | Open source | Apache Software Foundation | Apache 2.0 | 2026-10-09 |
| Standalone time-series databases | Open source | GrepTime Inc. | Apache 2.0 (core); a few enterprise-only features under the GreptimeDB Enterprise License, not built by default | 2026-10-06 | |
| Arc | Standalone time-series databases | Open source | Basekick Labs | AGPL-3.0 (Arc OSS); Arc Enterprise features ship in the same binary and are unlocked by a commercial licence key | 2026-10-06 |
| Standalone time-series databases | Commercial product | KX (KX Software Limited, majority owned by TA Associates) | Proprietary, licence key required (free KDB-X Community Edition within limits); the KDB-X Python wrapper is Apache 2.0 apart from its bundled `q.so` | 2026-10-06 | |
| Built on PostgreSQL | Open source | Tiger Data (formerly Timescale) | Apache 2.0 (core) and Tiger Data License (full Community Edition) | 2026-10-05 | |
Tiger LakeBeta | Built on PostgreSQL | Commercial product | Tiger Data (formerly Timescale) | Proprietary (a Tiger Cloud feature) | 2026-10-11 |
Amazon Timestream | Managed services | Managed service on AWS | Amazon Web Services | Proprietary service; Timestream for InfluxDB runs open-source InfluxDB 2.x (MIT) and InfluxDB 3 Core (MIT or Apache 2.0), while InfluxDB 3 Enterprise and 2.x read replicas add InfluxData licence fees | 2026-10-06 |
| Metrics systems | Open source | Cloud Native Computing Foundation | Apache 2.0 | 2026-10-05 | |
| DataFrame databases | Commercial product | Man Group (licensed through ArcticDB Limited) | Business Source License 1.1 (source-available, not OSI open source): free for non-commercial, personal and academic use, while any business use, even in research or development, needs a commercial licence. Each version becomes Apache 2.0 two years after its release; 1.0 converted in March 2025 | 2026-10-06 | |
| Other | Commercial product | Cloudflare, Inc. | Proprietary | 2026-10-12 |
What each provider calls it
- AWS
- Timestream for InfluxDB (Timestream for LiveAnalytics has been closed to new customers since June 2025)
- Google Cloud
- Bigtable, BigQuery
- Azure
- Azure Data Explorer
- Open source & others
- TimescaleDB, InfluxDB, Prometheus, QuestDB, TDengine (IoT, one table per device), Apache IoTDB (industrial IoT; path tree or SQL tables over TsFile), GreptimeDB (metrics, logs and traces on object storage), Arc (DuckDB and Parquet), ArcticDB (Man Group; versioned pandas DataFrames on S3 or LMDB; source-available BSL); proprietary: kdb+ (KX, free Community Edition), used widely in finance
See it in a real stack
Architectures that use time-series databases
In code · sql
CREATE TABLE readings (time timestamptz NOT NULL, well_id int, psi double precision);
SELECT create_hypertable('readings', by_range('time', INTERVAL '1 day'));
-- hourly rollup, refreshed every hour by a background policy
CREATE MATERIALIZED VIEW readings_hourly WITH (timescaledb.continuous) AS
SELECT time_bucket('1 hour', time) AS hour, well_id, avg(psi) AS avg_psi
FROM readings GROUP BY hour, well_id;
SELECT add_continuous_aggregate_policy('readings_hourly',
start_offset => INTERVAL '3 hours', end_offset => INTERVAL '1 hour',
schedule_interval => INTERVAL '1 hour');Worth exploring
Benchmarks
How to read a benchmark →Often confused with
Where it came from1999–2024
Time-series storage grew out of network monitoring. In late 1997 Tobias Oetiker started RRDtool as a successor to his MRTG traffic grapher, and by 1999 it was in public beta, storing measurements such as network bandwidth, machine-room temperature and server load. Its round-robin database gave each series a fixed number of slots, overwrote the oldest values, and kept extra archives that consolidated older points into averages, minimums and maximums, so storage never grew but detail faded with age. That trade-off survives in today’s retention and downsampling policies.
As fleets of servers grew, so did the metrics. Graphite, built at Orbitz by Chris Davis, was open-sourced in 2008. SoundCloud started Prometheus in 2012 because its monitoring, mostly based on StatsD and Graphite, couldn’t keep up with hundreds of microservices, and InfluxDB followed in 2013. Facebook’s 2015 Gorilla paper showed how far compression could go: by storing timestamps as differences of differences and values XORed with the previous one, it cut storage about tenfold, enough to keep recent metrics in memory.
Others went back to SQL. TimescaleDB, launched in 2017, argued that relational databases handle time series well once the scaling problem is solved, and runs as a PostgreSQL extension. Cloud providers added managed services, such as Amazon Timestream, generally available in September 2020.
Why it’s built this way
- Fixed-size storage that forgets detail
- RRDtool’s circular buffer kept the storage footprint constant over time. Recent data stayed at full resolution and older data survived only as consolidated averages, minimums and maximums.
- Partition by time
- New points almost always land in the latest interval, and queries ask for time ranges. Splitting data into time chunks keeps the active chunk small and fast, and dropping old data means deleting whole chunks.
- Compress for how measurements change
- Timestamps arrive at regular intervals and values change little between readings, so encoding only the change saves a lot: Gorilla stored about 96% of timestamps in a single bit and shrank each 16-byte point to 1.37 bytes on average. Gorilla’s authors also noted that users care about aggregates and recent data more than individual old points.
- Label each series with dimensions
- Prometheus made a multi-dimensional data model a design goal: each series is a metric name plus key-value labels, so one query can slice by host, region or service.
Timeline
- 1999
Tobias Oetiker’s RRDtool, with its fixed-size round-robin database, is in public beta
- 2008
Graphite, built at Orbitz, is open-sourced
- 2012
SoundCloud starts Prometheus
- 2015
Facebook’s Gorilla paper shows tenfold compression for in-memory metrics
- 2017
TimescaleDB brings time-series storage to PostgreSQL
- 2020
Amazon Timestream becomes generally available
- 2024
Prometheus 3.0, its first major release in seven years
- Tobias Oetiker: About RRDtool (archived Sep 1999) · archived copy, original
- RRDtool documentation: rrdtool
- Graphite docs: Overview
- SoundCloud: Prometheus, monitoring at SoundCloud (Jan 2015)
- Prometheus docs: Overview
- InfluxDB v0.0.1 tag on GitHub (Oct 2013)
- Gorilla: A Fast, Scalable, In-Memory Time Series Database (VLDB 2015)
- Mike Freedman: Time-series data, why (and how) to use a relational database instead of NoSQL (2017)
- AWS What’s New: Amazon Timestream is now generally available (Sep 2020)
- Prometheus blog: Announcing Prometheus 3.0 (Nov 2024)
Sources18
- Tiger Data docs: Understand hypertables
- Tiger Data docs: Understand hypercore
- Tiger Data docs: Understand continuous aggregates
- Tiger Data docs: add_retention_policy()
- Tiger Data docs: create_hypertable()
- Tiger Data docs: CREATE MATERIALIZED VIEW (continuous aggregate)
- Tiger Data docs: add_continuous_aggregate_policy()
- Prometheus docs: Storage
- AWS: Amazon Timestream
- AWS docs: Amazon Timestream for LiveAnalytics availability change
- Google Cloud docs: Bigtable schema design for time series data
- Google Cloud docs: Work with time series data in BigQuery
- Microsoft Learn: What is Azure Data Explorer?
- InfluxDB 3 Core documentation
- QuestDB documentation
- GreptimeDB docs: Data model
- man-group/ArcticDB on GitHub
- Apache IoTDB docs: Modeling scheme design (tree and table models)
