Documentation Index
Fetch the complete documentation index at: https://mintlify.com/questdb/questdb/llms.txt
Use this file to discover all available pages before exploring further.
Overview
QuestDB is an open-source time-series database written primarily in zero-GC Java with native C/C++ libraries for performance-critical operations. It features column-oriented storage, SIMD-accelerated vector execution, and specialized time-series SQL extensions.Design Principles
1. Zero-GC on Data Paths
No allocations during query execution or data ingestion. Use object pools and pre-allocated buffers to avoid triggering garbage collection on hot paths. Implementation:- Custom collections (
ObjList,CharSequenceIntHashMap) fromio.questdb.stdpackage - Object pooling for reusable components
- Direct memory access via
Unsafeclass:io.questdb.std.Unsafe - Pre-allocated exception instances on hot paths
2. No Third-Party Java Dependencies
Algorithms are implemented from first principles for tight integration and performance. This ensures:- Perfect fit with existing code
- Full control over memory allocation
- No unexpected GC from external libraries
- Minimal JAR size
3. Native Code for Performance
SIMD operations, memory management, and platform-specific optimizations in C/C++ via JNI:- Vector operations:
core/src/main/c/share/vec_agg.cpp - Memory utilities:
core/src/main/c/share/files.c - Platform-specific:
core/src/main/c/{linux,osx,windows,freebsd}/
4. Column-Oriented Storage
Data stored by column for:- Better compression
- Vectorized operations (process multiple values simultaneously)
- Efficient scans (read only needed columns)
- Time-series optimizations
Module Structure
QuestDB repository organization:Core Module
All production code lives incore/:
Core Package Layout
The main packages incore/src/main/java/io/questdb/:
Storage Engine (cairo/)
Location:core/src/main/java/io/questdb/cairo/
Responsibilities:
- Table readers/writers
- Columnar storage
- Write-Ahead Log (WAL)
- Transactions and MVCC
- Partitioning by time
- Indexing (bitmap indexes)
- Memory-mapped file management
CairoEngine— Storage engine core:io/questdb/cairo/CairoEngine.java:1TableWriter— Writes data to tables:io/questdb/cairo/TableWriter.java:1TableReader— Reads data from tables:io/questdb/cairo/TableReader.java:61ColumnIndexer— Builds bitmap indexesPartitionBy— Time-based partitioning logic
cairo/wal/— Write-Ahead Log implementationcairo/vm/— Virtual memory (memory-mapped files)cairo/sql/— SQL execution interfacescairo/pool/— Reader/writer pooling
SQL Engine (griffin/)
Location:core/src/main/java/io/questdb/griffin/
Responsibilities:
- SQL parsing
- Query compilation
- Query optimization
- Code generation
- Query execution
SqlCompiler/SqlCompilerImpl— SQL compilation entry point:io/questdb/griffin/SqlCompilerImpl.java:149SqlParser— Parses SQL into ASTSqlOptimiser— Query optimizationSqlCodeGenerator— Generates execution plansQueryModel— Internal query representation
griffin/engine/— Query execution enginegriffin/model/— Query model (AST)griffin/engine/functions/— SQL functionsgriffin/engine/groupby/— Aggregation logicgriffin/engine/join/— Join algorithms
Network Protocols (cutlass/)
Location:core/src/main/java/io/questdb/cutlass/
Responsibilities:
- Network protocol implementations
- Client-facing APIs
cutlass/pgwire/— PostgreSQL wire protocol (port 8812)cutlass/http/— REST API and web console (port 9000)cutlass/line/— InfluxDB Line Protocol / ILP (port 9009)cutlass/text/— CSV import
PGServer— PostgreSQL wire protocol serverHttpServer— HTTP/REST API serverLineTcpReceiver— ILP ingestion
Collections and Utilities (std/)
Location:core/src/main/java/io/questdb/std/
Responsibilities:
- Zero-allocation data structures
- Memory utilities
- Platform abstractions
- String handling
- Date/time utilities
ObjList— Zero-allocation ArrayList replacementCharSequenceIntHashMap— Zero-allocation HashMapUnsafe— Direct memory access:io/questdb/std/Unsafe.java:40Vect— SIMD vector operations (JNI):io/questdb/std/Vect.java:27MemoryTag— Memory allocation trackingNumbers— Fast numeric parsingChars— CharSequence utilities
Message Passing (mp/)
Location:core/src/main/java/io/questdb/mp/
Responsibilities:
- Worker pools
- Job scheduling
- Ring queues for inter-thread communication
- Lock-free queues
WorkerPool— Thread pool managementRingQueue— Lock-free ring bufferSequence— Coordination for ring queuesJob— Base interface for background jobs
JIT Compilation (jit/)
Location:core/src/main/java/io/questdb/jit/
Responsibilities:
- Just-in-time compilation for filters
- Native code generation for WHERE clauses
- x86-64 only (not available on ARM64)
Logging (log/)
Location:core/src/main/java/io/questdb/log/
Responsibilities:
- Zero-allocation logging framework
- Asynchronous log writing
- Structured logging
LogFactory— Creates loggersLog— Logger interfaceLogRecord— Log entry builder
Entry Points
Key starting points for understanding the codebase:Server Startup
ServerMain.java — Main server entry point: io/questdb/ServerMain.java:69
- Parses configuration
- Initializes
CairoEngine - Starts network servers (HTTP, PostgreSQL wire, ILP)
- Starts background jobs (WAL application, compaction, etc.)
Storage Engine
CairoEngine.java — Storage engine core: io/questdb/cairo/CairoEngine.java:1
- Manages table lifecycle
- Provides reader/writer pools
- Coordinates WAL application
- Handles schema changes
SQL Compilation
SqlCompilerImpl.java — SQL compilation: io/questdb/griffin/SqlCompilerImpl.java:149
- Parses SQL text into AST
- Validates and optimizes query
- Generates execution plan
- Returns
CompiledQueryorRecordCursorFactory
Table I/O
TableWriter.java — Table writes: io/questdb/cairo/TableWriter.java:1
- Appends rows to tables
- Handles out-of-order (O3) data
- Manages partitions
- Builds indexes
TableReader.java — Table reads: io/questdb/cairo/TableReader.java:61
- Reads column data
- Provides partition iteration
- Handles column versions
- Manages memory-mapped files
Data Flow
Query Execution
- Parse —
SqlParserconverts SQL text toQueryModel(AST) - Optimize —
SqlOptimiserrewrites query for performance - Generate —
SqlCodeGeneratorcreatesRecordCursorFactory - Execute — Factory creates
RecordCursorfor iteration - Fetch — Cursor reads from
TableReadervia memory-mapped files
Data Ingestion (ILP)
- Receive —
LineTcpReceiveraccepts ILP messages - Parse — Parse line protocol format
- Buffer — Buffer rows in memory
- Write — Flush to
WalWriter(WAL-enabled) orTableWriter(direct) - Apply — Background job (
ApplyWal2TableJob) applies WAL to table - Index — Build indexes in background
Transaction Flow
- Begin —
TableWriter.beginRow() - Populate — Set column values
- Commit —
TableWriter.commit()makes data visible - Transaction File — Update
_txnfile with new metadata - Readers —
TableReadersees new data on nextreload()
Memory Architecture
QuestDB uses multiple memory management strategies:Memory-Mapped Files
Column data accessed viammap() (OS-level file mapping):
- Interfaces:
MemoryMR,MemoryMARWincairo/vm/api/ - Implementations:
MemoryCMRImpl,MemoryCARWImpl - Benefits: OS handles paging, efficient for large datasets
Off-Heap Allocation
Direct native memory for temporary data structures:- Managed by:
Unsafe.malloc(),Unsafe.free() - Tracking:
MemoryTagenum tracks allocation sources - Used for: Indexes, sorting, grouping, temporary buffers
Concurrency Model
Reader-Writer Concurrency
- Multiple readers: Any number of concurrent readers per table
- Single writer: At most one writer per table at a time
- MVCC: Readers see consistent snapshots via transaction versioning
- Coordination:
TxnScoreboardtracks active reader transactions
Worker Pools
Background work distributed across worker pools:- Writer pool — Handles WAL application
- Shared pool — Query execution
- WAL apply pool — Applies WAL to tables
- IO pool — Network I/O
Configuration
Configuration hierarchy:server.conf— User-editable configuration file- Environment variables — Override file settings
- Defaults —
DefaultServerConfigurationprovides defaults
ServerConfiguration— Top-level server configCairoConfiguration— Storage engine configHttpServerConfiguration— HTTP server configLineTcpReceiverConfiguration— ILP config
Testing Architecture
See Testing Conventions for details. Test organization mirrors production code:Platform Abstraction
Platform-specific code isolated in:Java
io.questdb.std.Os— OS detectionio.questdb.std.Files— File operationsio.questdb.std.FilesFacade— Mockable file operations
Native C/C++
Related Pages
- Storage Engine — Cairo storage internals
- SQL Compiler — Griffin compiler architecture
- SIMD Optimizations — Vector operations
- Memory Management — Zero-GC design