DBDB.io The Encyclopedia of Database Systems · Est. 2017
Database of Databases

Database Entry

Kdb+


Kdb+ is a column-based relational time series database, developed by Kx Systems. Kdb+ database is designed to be used in financial area to store time series data and scale up/out when data increases.[05]

Developer
Country of Origin
US
Start Year
1998 [05]
Former Name
kdb
Acquired By
Project Type
Commercial
Supported Languages
C, C#, C++, Go, Java, JavaScript, Lua, Matlab, Perl, PHP, Python, R, Scala
Operating Systems
Linux, macOS, Solaris, Windows
License
Proprietary

Database Entry

Kdb+


Kdb+ is a column-based relational time series database, developed by Kx Systems. Kdb+ database is designed to be used in financial area to store time series data and scale up/out when data increases.[05]

History[05]


In 1998, Kx Systems released kdb. Kx Systems then released kdb+ as the 64-bit version in 2003. It is written in q language. Kdb+ is built to process large volume of time-series data in areas including finance and IoT.

Compression[06]


Kdb+ supports on-disk compression with following algorithms:

  • kdb+ algorithm: default compression algorithm

  • gzip: supports different level of compression, larger compression rate needs more computation time

  • Google Snappy: time performance is better but compression rate is lower compared with previous two algorithms

Concurrency Control[07]


Kdb+ uses partition-based timestamp ordering. Each transaction gets their timestamp at the begin. And on each partition, transactions are executed in order of their timestamp.

Data Model[07]


Kdb+ uses relational model. One big problem to apply relational model in time series database is to handle large data set. Kdb+ supports on-disk compression to hold more data on single machine and data partitioning to distribute data among different machines.

Foreign Keys[07]


Kdb+ supports referential integrity.

Indexes[07]


Kdb+ supports both primary and secondary indexes.

Isolation Levels[08]


Kdb+ only supports SERIALIZABLE isolation level. This is achieved by using deterministic concurrency control (partition-based). Transactions get their timestamp and execute in order on each partition.

Joins[06]


Kdb+ supports sql standard joins. It also supports as-of join and window join.

Logging[06]


Kdb+ uses physical logging and WAL. In-memory event-engine will log new data tolog file to ensure durability.

Query Compilation[06]


Query Execution[06][09]


Kdb+ is written in q language and it's vector-based. Each function/operation in the query plan manipulates array/vector data.

Query Interface[07]


Kdb+ also supports ODBC/JDBC query interfaces.

Storage Architecture[06]


Kdb+ has both in-memory and on-disk storage. New data is held in memory and old data is flushed to disk. The flush is controlled by event-engine. By default, event-engine will flush in-memory data to disk at daily basis. Rationale behind this design is the system wants to keep everyday new data in memory for fast query.

Storage Model[04]


Kdb+ uses DSM both for in-memory and on-disk storage.

Stored Procedures[04]


Kdb+ supports user to write and store UDF in q language in addition to built-in functions.

System Architecture[06]


Kdb+ uses Lambda architecture on each single node. It has the following properties:

  • Data currently using stores in memory, while historical data is stored on disk.

  • New data come in from streaming sources.

  • Event-engine distribute data to downstream subscribers, including real-time database engine and streaming query engine.

  • Real-time database projects its content down to on-disk historical database for analytic use at daily basis, controlled by event-engine.

Views[06]


Citations

9 sources
  1. The Data Intelligence AI Platform Built For Capital Markets kx.com
  2. Documentation for KX products - Product documentation kx.com
  3. https://kx.com/blog/ kx.com
  4. kdb+ - Wikipedia wikipedia.org
  5. https://kx.com/about-kx kx.com
  6. Fintan Quill Engineer, Kx Systems: Time Series Analytics for Streaming Big Fast Data panopto.com
  7. Kdb System Properties db-engines.com
  8. Interfaces | kdb+ and q documentation - kdb+ and q documentation kx.com
  9. https://code.kx.com/q4m3 kx.com
Revision #38