QuestDB is a high performance open source SQL database for time series data.
It uses a column-oriented approach, heavy parallelized vectorized execution, SIMD instructions and a whole array of low-latency techniques. The whole code base is built from scratch, without dependencies and 100% free from garbage collection.
QuestDB implements SQL and augments it for time-series with native extensions. It exposes a PostgreSQL wire protocol, high-performance REST API and supports ingestion with InfluxDB Line Protocol. QuestDB uses a relational model with maintenance-free schemas. Relational and time-series joins make it easy to correlate data over time. Writes are durably committed to disk, meaning that the data is safe - yet instantly accessible.
Query our demo dataset with 1.6 billion rows in milliseconds.
The interactive console to import data (drag and drop) and start querying right away. Check our Web Console guide to get started:
Number operations per second per thread. Writes are durable and written to disk.
Operation | 64-bit double | 32-bit int |
---|---|---|
Read | 120 Million /s | 240 Million /s |
Write | 240 Million /s | 480 Million /s |
On a CPU with 6 memory channels, QuestDB can scan through 117GB of data per second.
Execution time on a c5.metal instance using 16 of the 96 threads available.
Query | Runtime |
---|---|
SELECT sum(double) FROM 1bn |
0.061 secs |
SELECT tag, sum(double) FROM 1bn |
0.179 secs |
SELECT tag, sum(double) FROM 1bn WHERE timestamp='2019' |
0.05 secs |
The easiest way to get started is with Docker:
docker run -p 9000:9000 -p 8812:8812 questdb/questdb
You can more information about Docker usage on the dedicated page.
You can interact with QuestDB using:
- Web Console listening
on port
9000
: localhost:9000 - Postgres on port
8812
- REST API on port
9000
Both the HTTP and PostgreSQL servers reference the database in
<root_directory>/db
.
You can connect to the Postgres server as follows. The default password is
quest
:
psql -h localhost -p 8812 -U admin -W -d qdb
- Java 11 64-bit
- Maven 3
- Node.js 12 / NPM 6
java --version
mvn --version
node --version
git clone git@github.com:questdb/questdb.git
Commands below will create JAR without assembling executable binaries nor building web console.
cd questdb
mvn clean package -DskipTests
To package web console with the jar use the following command:
mvn clean package -DskipTests -P build-web-console
To build executable binaries use the following command:
mvn clean package -DskipTests -P build-web-console,build-binaries
To run tests it is not required to have binaries built nor web console. There are over 4000 tests that should complete without 2-6 minutes depending on the system.
mvn clean test
To release to Maven Central use the following command that activates deploy
profile. Ensure that your ~/.m2/settings.xml
contains username/password for
server central
and gnupg
is on hand to sign the artefacts.
mvn -pl !benchmarks clean deploy -DskipTests -P build-web-console,maven-central-release
# Create a database root directory and run QuestDB
mkdir <root_directory>
java -p core/target/questdb-5.0.5-SNAPSHOT.jar -m io.questdb/io.questdb.ServerMain -d <root_directory>
Complete references are available in the Documentation.
Get started:
Develop:
Concepts:
Feel free to contribute to the project by forking the repository and submitting pull requests. Please make sure you have read our contributing guide.
Thanks to these wonderful people (emoji key):
clickingbuttons 💻 🤔 📓 |
ideoma 💻 📓 |
tonytamwk 💻 📓 |
sirinath 🤔 |
igor-suhorukov 💻 🤔 |
mick2004 💻 📦 |
rawkode 💻 🚇 |
solidnerd 💻 🚇 |
solanav 💻 📖 |
shantanoo-desai 📝 💡 |
alexprut 💻 🚧 |
lbowman 💻 |
chankeypathak 📝 |
upsidedownsmile 💻 |
This project follows the all-contributors specification. Contributions of any kind welcome!