Cloud Parts

kdb+

A columnar time-series database that is also an interpreter for q, an array language, used for market data across trading and risk.

Type
Commercial product
Made by
KX (KX Software Limited, majority owned by TA Associates)
License
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
Facts checked
6 October 2026

What it is

kdb+ is one small binary, about 800 KB, that is both a database and the interpreter for q, an array language descended from APL. A table is a set of columns held as arrays in memory, and q applies each operation to a whole column at once, so analytics run inside the database instead of in a separate stored-procedure language. On disk a table is splayed: a directory with one file per column, mapped into memory rather than loaded, so a query reads only the columns it names. Large tables are also partitioned, usually one splayed directory per day. The classic setup, kdb+tick, is a handful of q processes talking over q’s own IPC protocol: a tickerplant receives the feed, can log it to a file for recovery and publishes it to subscribers; a real-time database (RDB) keeps today’s rows in RAM; and a historical database (HDB) serves past days from disk. Built-in as-of joins (aj) match each trade with the quote in force at that moment.

KX now sells kdb+ as KDB-X, generally available since November 2025: the same engine, backward compatible, plus Python (KDB-X Python, formerly PyKX), SQL, a Parquet module, reads from object storage and a PostgreSQL wire-protocol proxy. Every copy needs a licence key from KX. The Community Edition is free for personal and commercial use with no expiry, within limits: 16 GB of RAM for q, one physical or virtual instance, 4 secondary threads and 16 connections per q process. Above that, KDB-X is priced by memory: on 2026-10-06 the list price was $1,822.92 a month for 32 GiB and $5,468.25 for 64 GiB, with quotes above 128 GiB. KX became majority owned by the private equity firm TA Associates in July 2025 and merged with OneTick, a market data and surveillance vendor, that September.

Why teams pick it

  • Fast scans, aggregations and time joins over columns of tick data: as-of joins, bucketing with xbar and nanosecond timestamps are part of the language
  • Data and logic live in one process, so calculations run where the data is instead of shipping rows to an application
  • A plain on-disk layout: each column is a file, each day a directory, and the only stored metadata besides names is a .d file listing column order
  • Three decades of production use in capital markets, where the tickerplant, RDB and HDB pattern is widely known
  • KDB-X Community is free for commercial use within its limits, and Python and SQL interfaces let people start without learning q

Watch out for

  • Closed source and licence-keyed: every install needs a key from KX, and use beyond Community limits (16 GB RAM, one instance, 4 threads, 16 connections per process) is priced per GiB of memory, about $1,823 a month for 32 GiB at list price
  • q is a terse APL-family language that few developers know; Python and SQL interfaces help, but tuning and the tick processes are still written in q
  • Not a self-managing cluster: scaling out means designing and running your own set of tickerplants, RDBs, HDBs and gateways
  • The older free licence, kdb+ on demand Personal Edition, is non-commercial only, must reach KX’s servers about once a minute, times out after six months and forbids publishing benchmark results
  • The product line is in flux: new features now ship in KDB-X, and the company changed hands in 2025 and merged with OneTick

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.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.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

Ticks, an as-of join and a date partition through KDB-X Python (PyKX) · python

import pykx as kx  # pip install pykx; running q code needs a licence (Community is free)

# two in-memory tables, one array per column
kx.q('trade:([] time:09:30:00.000+asc 1000?23400000; sym:1000?`AAPL`MSFT; price:100+1000?10f; size:100*1+1000?10)')
kx.q('quote:([] time:09:30:00.000+asc 5000?23400000; sym:5000?`AAPL`MSFT; bid:100+5000?10f; ask:100+5000?10f)')

# as-of join: the quote in force when each trade happened
tq = kx.q('aj[`sym`time; trade; quote]')
print(tq.pd().head())

# volume-weighted average price per symbol in 5-minute buckets (qSQL)
vwap = kx.q('select vwap:size wavg price by sym, 5 xbar time.minute from trade')

# write today's trades as a splayed table in a date partition: /data/hdb/2026.10.06/trade/
kx.q('.Q.dpft[`:/data/hdb; 2026.10.06; `sym; `trade]')

Editions and licences#

All three run the same engine; they differ in who may use them and how much hardware they may use. Prices are list prices checked on 2026-10-06.

KDB-X CommunityKDB-X commercialkdb+ on demand Personal (older free licence)
PriceFreePriced per GiB of memory: $1,822.92 a month for 32 GiB, $5,468.25 for 64 GiB, quote above 128 GiBFree
Commercial useYesYesNo: personal, non-commercial use only
Hardware limits16 GB RAM for q, 4 secondary threads and 16 connections per q process, 24 CPU cores in totalAs licensed2 computers, up to 24 cores each
Where it may runOne physical or virtual instance, on premises or in the cloudAs licensedYour own computers only, not on a cloud provider
Internet and expiryWorks offline; no expiry datePer contractContacts KX about once a minute and exits if it can’t; times out after six months unless extended
  • KX’s licensing page now points free users to KDB-X Community. Splitting work across several Community licences to get around the limits is not allowed.
  • The Personal Edition licence also forbids sharing performance reports or benchmarks.

The processes in a kdb+tick system#

A typical deployment is several q processes, each with one job. They call functions on each other over q’s IPC protocol.

Feed handler

Converts an exchange or vendor feed into q messages. Usually written in C, C++, Java or C#.

Tickerplant

Receives the messages, can write them to a log file for recovery, and publishes them to subscribed processes, immediately or in small batches.

Real-time database (RDB)

today, in RAM

Holds the current day’s data in memory for sub-millisecond queries. KX’s tick guide suggests RAM of at least four times the expected daily data.

Intraday database (IDB)

optional

When memory runs short, recent data is written to disk in small time partitions so the RDB can stay lean.

Historical database (HDB)

past days, on disk

Date-partitioned, splayed tables on disk, memory-mapped when queried. At end of day the day’s data is sorted by instrument and then time before it is written.

See it in a real stack

No architecture uses kdb+ yet. Drop it into the playground and wire it up yourself.Open playground →
Where it came from1993–2025

Arthur Whitney began building trading systems at Morgan Stanley in 1988, around a terabyte of market data and a pairs-trading desk, using his own version of APL. In 1993 he and Janet Lustgarten founded Kx Systems to sell K, a smaller successor language. He kept rewriting K every few years, and kept storing data by column, which he had done since the 1970s: when you want time, price and size for one stock on one day, you read just those columns.

In 2003 Kx released q and the kdb+ database together. q is K with about 50 table operations added and English keywords instead of symbols, so a database query looks a little like SQL. Banks adopted it for tick data, where a day of trades and quotes fits in memory and years of history sit on disk.

First Derivatives, a Northern Irish firm, took control of Kx in 2014 and agreed in 2018 to buy out the founders’ remaining shares. In July 2025 TA Associates acquired FD Technologies, and KX relaunched kdb+ as KDB-X with Python, SQL and a free commercial Community Edition.

Why it’s built this way

Store every table by column
Market data queries touch a few fields across many rows. Whitney said that to get one stock’s activity for a day you need only four columns, so a column store needs four seeks and a few megabytes of reading.
Keep today in memory, history on disk
Whitney’s rule was to set things up so “the hot stuff is in memory”. During the day data stays sorted by time; at end of day it is sorted by instrument and then time and written to disk sequentially.
Make the database and the language one thing
kdb+ tables are q objects written to the file system and mapped back into memory, so there is no separate stored-procedure language to learn or to move data into.
English words instead of APL symbols
q sits on the 2000 implementation of K but adds named table operations and SQL-like select expressions, which made it approachable for database work.

Timeline

  1. 1993

    Arthur Whitney and Janet Lustgarten found Kx Systems to sell K

  2. 2003

    Kx releases q and the kdb+ database

  3. 2014

    First Derivatives takes a controlling stake in Kx

  4. 2020

    kdb+ 4.0 adds multithreaded primitives and data-at-rest encryption

  5. 2025

    TA Associates buys KX in July; KDB-X reaches GA in November

Sources20 · facts checked 6 October 2026

Improve this page on GitHub