Looking for peak time-series? Amplify ingestion and query speeds and significantly reduce infrastructure costs and complexity.
QuestDB is a time series database truly built by developers for developers. We found that QuestDB provides a unicorn solution to handle extreme TPS while also offering a simplified SQL programming interface.
Highest cardinality? Check
QuestDB significantly outpaces InfluxDB in pure performance. Ingest speeds are 5-12x faster, while more complex queries can see orders of magnitude improvement. Overcome infrastructure bottlenecks and break free from cardinality limits. Bring all your unique values!
Query over 1.2 billion rows in milliseconds
Try QuestDB demo in your browser
Aggregate data into one-minute intervals, reduce the granularity and size of the dataset for efficiency.
from(bucket: "example-bucket") |> range(start: -1h) |> filter(fn: (r) => r._measurement == "cpu" and r.cpu == "cpu-total" ) |> aggregateWindow(every: 1m, fn: mean)
SELECT timestamp, avg(cpu), avg(cpu-total)FROM 'example-bucket'WHERE timestamp > dateadd('h', -1, now())SAMPLE BY 1m;
Join two tables and get a column from each table where the timestamp matches.
f1 = from(bucket: "example-bucket-1") |> range(start: "-1h") |> filter(fn: (r) => r._field == "f1") |> drop(columns: "_measurement")
f2 = from(bucket: "example-bucket-2") |> range(start: "-1h") |> filter(fn: (r) => r._field == "f2") |> drop(columns: "_measurement")
union(tables: [f1, f2]) |> pivot( rowKey: ["_time"], columnKey: ["_field"], valueColumn: "_value" )
SELECT a.timestamp, f1, b.timestamp, f2FROM 'example-table-1' aASOF JOIN 'example-table-2' b;
QuestDB was our choice for real time data due to high performance, open source, high flexibility and great support. Performance was significantly better than the competition and we believe that QuestDB will become market leading.
// QuestDB Rust clientuse questdb::{Result,ingress::{Sender,Buffer,TimestampNanos}};fn main() -> Result<()> {let mut sender = Sender::from_conf("http::addr=localhost:9000;")?;let mut buffer = Buffer::new();buffer.table("sensors")?.symbol("id", "toronto1")?.column_f64("temperature", 20.0)?.column_i64("humidity", 50)?.at(TimestampNanos::now())?;sender.flush(&mut buffer)?;Ok(())}
One string away from top performance
QuestDB supports the InfluxDB Line Protocol (ILP). Apply first-party ILP via the official QuestDB clients. Top performance, useful feedback and clear docs. Upgrade your ingress with a string change. Well documented clients are available for Java, Go, Python, Rust, .NET and Node.js, and more.
Using QuestDB, we deliver time series datasets with real-time market data from a top 10 blockchain. This outperforms a legacy cloud-based data platform at a fraction of the cost, reducing TCO by >90%.
Always open source, or Enterprise
Open source under Apache 2.0. Enterprise for premium features like distributed clusters, role-based access control, support SLAs and more. That's it. Clear and simple!
We switched from InfluxDB to QuestDB to get queries that are on average 300x faster utilizing 1/4 of the hardware, without ever overtaxing our servers.
Blazing speed, bright future
Globally distributed, hyper-fast next generation database