Cloud Parts

TDengine

A clustered time-series database for IoT and industrial data that gives every device its own table, grouped under “supertables” with tags.

Type
Open source
Made by
TAOS Data (TDengine)
License
AGPL-3.0 (TDengine TSDB open source); TSDB-Enterprise, IDMP and TDengine Cloud are commercial
Facts checked
6 October 2026

What it is

A TDengine cluster is made of dnodes, each a running taosd server. Inside them, mnodes keep the cluster’s metadata and health, vnodes store the data, and optional qnodes and snodes run queries and stream processing apart from storage. Applications connect through the taosc driver or through taosAdapter, which offers REST and WebSocket APIs and also accepts InfluxDB line protocol, OpenTSDB, StatsD, collectd and Prometheus remote write. The data model gives every device (a “data collection point”) its own table: a supertable defines the measurement columns and the tag names, such as model or location, and each subtable is one device with its own tag values. All of one table’s rows live in a single vnode, chosen by consistent hashing, so writing is a simple append. With three replicas, each vnode belongs to a Raft group that confirms a write once a majority has logged it. Data files cover time ranges set per database by DURATION (10 days by default), and KEEP (3,650 days by default) decides when they are dropped.

The open-source TDengine TSDB, under AGPL-3.0, includes clustering, Raft replication, stream processing, a cache of each table’s latest values, and Kafka-like topic subscriptions, so many IoT setups need no separate queue or cache. TDengine TSDB-Enterprise adds tiered storage including S3, encryption, backup and restore, database- and table-level access control, auditing, load balancing by splitting and merging vnodes, replication between sites, and zero-code connectors for PI System, OPC, MQTT and other sources. The company sells it together with TDengine IDMP, a layer for asset models, dashboards and AI analysis, as TDengine All-in-One: free for up to 5,000 tags since July 2026 and licensed by tag count above that, where a tag is one measured signal such as a pump’s discharge pressure. TDengine Cloud runs the same package, fully managed on AWS, Azure or Google Cloud, from $970 a month.

Why teams pick it

  • The supertable model fits fleets of devices: a device’s table is created on its first insert, and one query covers them all with PARTITION BY tbname and INTERVAL windows
  • Clustering and Raft replication are in the open-source build, as they have been since August 2020
  • Fewer moving parts: stream processing, a latest-value cache and Kafka-like subscriptions are built in, and from 3.4.3 subscriptions can also be served over MQTT
  • Easy to feed: taosAdapter accepts what agents built for InfluxDB, OpenTSDB, StatsD, collectd or Prometheus already send, and Kafka source and sink connectors are open source

Watch out for

  • AGPL-3.0: if you modify TDengine and let users reach it over a network, you must offer them your changed source; companies that avoid the AGPL need a commercial licence
  • Tiered storage and S3, encryption at rest, backups, two-replica databases and table-level access control are Enterprise only; the open build allows one or three replicas
  • Schema rules follow the device model: the first column must be a timestamp, and a table allows at most 4,096 columns and 128 tags, so you decide up front which supertable a source belongs to and which values are tags
  • Commercial pricing counts tags: above the free 5,000, a self-hosted licence starts at $12,500 a year for 7,500 tags, high availability adds 30%, and support on the free tier costs $3,375 a year
  • The open-source tree is built and tested mainly on Linux; macOS works for development, and Windows support is limited

Alternatives

What all time-series databases have in common →
Amazon TimestreamAWSAWS’s time-series databases: a serverless engine now closed to new customers, and managed InfluxDB 2 and 3.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 TimechoDBArcOpen sourceA young single-binary time-series database in Go that writes incoming data as Parquet files and queries them with DuckDB SQL.ArcticDBCommercialMan Group’s serverless DataFrame database: a Python library with a C++ engine that stores versioned pandas DataFrames directly in S3, Azure Blob Storage or local LMDB.GreptimeDBOpen sourceA Rust database that stores metrics, logs and traces as tables on object storage, queried with SQL or PromQL.InfluxDBOpen sourceThe best-known time-series database, fed by line protocol and Telegraf; now in its third generation, a Rust rewrite that keeps data as Parquet files on object storage.kdb+CommercialA columnar time-series database that is also an interpreter for q, an array language, used for market data across trading and risk.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.TimescaleDBOpen sourceA PostgreSQL extension that turns ordinary tables into time-partitioned, compressed time-series tables.Workers Analytics EngineCommercialCloudflare’s time-series analytics store for Workers: a non-blocking `writeDataPoint()` call to record events with unlimited cardinality, adaptive sampling to keep it cheap, and a SQL API to query them.

How it fits with other technologies

A supertable of meters, one subtable per meter, and windowed queries · sql

-- 10-day data files, kept a year, latest row of each table cached
CREATE DATABASE power KEEP 365 DURATION 10 CACHEMODEL 'last_row';
USE power;

-- the template: measurement columns plus tags that describe each meter
CREATE STABLE meters (ts TIMESTAMP, current FLOAT, voltage INT, phase FLOAT)
  TAGS (location VARCHAR(64), group_id INT);

-- each meter gets its own subtable, created on its first insert
INSERT INTO d1001 USING meters TAGS ('California.SanFrancisco', 2)
  VALUES (NOW, 10.3, 219, 0.31);

-- 10-minute averages for every meter over the last day
SELECT _wstart, tbname, avg(voltage) FROM meters
WHERE ts > NOW - 1d
PARTITION BY tbname INTERVAL(10m);

-- the newest reading across all meters, served from the cache
SELECT LAST_ROW(ts, current) FROM meters;

Editions and pricing#

The open-source database is free under AGPL-3.0. The commercial package bundles TSDB-Enterprise with IDMP and is priced by tag count. List prices checked on 2026-10-06.

TSDB open sourceAll-in-One, self-hostedTDengine Cloud
Who runs itYouYou: at the edge, on servers, or in any cloudTDengine, on AWS, Azure or Google Cloud
What’s in itClustering, Raft replication, streams, cache, subscriptionsAdds Enterprise features (tiered storage, connectors, security, backups) and IDMPSame as All-in-One, with infrastructure and operations included
LicenceAGPL-3.0Annual or perpetual commercial licenceMonthly or annual plan
5,000 tagsFreeFree; optional support $3,375 a yearStarter: $970 a month
10,000 tagsFree$15,500 a year, or $38,750 perpetualSmall: $1,740 a month
40,000 tagsFree$28,000 a year, or $70,000 perpetualLarge: $3,500 a month
High availabilityThree-replica Raft groups30% on top of the licence priceNot priced separately
  • A tag is one time-series signal, typically asset plus measurement, such as Pump-101 / DischargePressure. Sampling rate doesn’t change the count.
  • The free 5,000-tag tier covers the self-hosted package only; TDengine Cloud plans are priced separately.

TDengine, InfluxDB 3 Core or QuestDB?#

What each free, open-source build gives you. All three accept InfluxDB line protocol, so the same agents can feed any of them.

TDengine TSDBInfluxDB 3 CoreQuestDB
LicenceAGPL-3.0MIT or Apache 2.0Apache 2.0
Clustering in the free buildYes: Raft, one or three replicasNo, a single nodeNo, a single instance
Data modelA supertable per device type, one subtable per device, tagsTables per measurement, with tags and fieldsTables with a designated timestamp and SYMBOL columns
Query languageSQL with INTERVAL, PARTITION BY tbname, FILLSQL and InfluxQLSQL with SAMPLE BY, LATEST ON, ASOF JOIN
Where data livesLocal disks; S3 tier is Enterprise onlyParquet on object storage or local diskLocal column files; Parquet by hand, object storage tier is Enterprise only
Long time rangesYesLimited to 432 Parquet files per query by default, about 72 hoursYes

See it in a real stack

No architecture uses TDengine yet. Drop it into the playground and wire it up yourself.Open playground →

Benchmarks

How to read a benchmark →
Where it came from2017–2026

Jeff Tao (Tao Jianhui) worked at Motorola and 3Com in the United States, as a principal staff engineer at Motorola Mobile Devices, then returned to Beijing in 2008 and founded two companies. In 2016 he concluded that IoT data was growing into a big-data problem of its own and deserved a tool designed around it, and in May 2017 he founded TAOS Data to build one.

TDengine’s code went public on GitHub on July 12, 2019, under AGPL-3.0. Clustering followed in August 2020, the month version 2.0 was tagged, while InfluxDB kept clustering in its paid edition, a contrast TAOS Data has used in its marketing ever since. Version 3.0 in August 2022 made TDengine cloud native, with compute separated from storage and Kubernetes support, and built in caching and a message queue.

Since then the company has moved toward industrial data. TDengine IDMP adds asset models, dashboards and AI analysis on top of the database, pitched as a replacement for traditional data historians such as PI System, and in July 2026 the whole package became free for deployments of up to 5,000 tags.

Why it’s built this way

One table per data collection point
Each device writes its own readings in time order. Giving it a table keeps its data contiguous, so a write is a plain append and reading one device’s history is a sequential scan.
Supertables as templates, with tags
Devices of one type share a schema, and attributes such as model or location rarely change. Storing them once per subtable as tags, rather than on every row, lets one query aggregate across devices by tag.
Keep each table whole inside one vnode
Consistent hashing places every table in one vnode, so a device’s data is never spread across machines, and the cluster grows by adding vnodes and dnodes.
Build in the cache, streams and queue
IoT systems usually bolt a cache, a stream processor and a message queue onto the database. Version 3.0 made caching of new data and a message queue tailored for time series part of TDengine itself.

Timeline

  1. 2017

    Jeff Tao founds TAOS Data in Beijing in May

  2. 2019

    TDengine open-sourced under AGPL-3.0 on July 12

  3. 2020

    Version 2.0 and open-source clustering in August

  4. 2022

    Version 3.0, cloud native, in August

  5. 2026

    All-in-One package made free for up to 5,000 tags in July

Sources20 · facts checked 6 October 2026

Improve this page on GitHub