English for QuestDB Developers
Master the English vocabulary developers need for QuestDB's time-series model, ingestion line protocol, and SQL time functions when discussing high-frequency data.
QuestDB is a time-series database built for high-throughput ingestion (market data, sensor readings, metrics) queried with familiar SQL extended with time-specific functions. Teams new to time-series databases often reach for general relational vocabulary that doesn’t map cleanly — “designated timestamp,” “symbol type,” and “out-of-order ingestion” describe concepts a generic RDBMS doesn’t have. This guide covers the English used when discussing QuestDB with a team.
Key Vocabulary
Designated timestamp — the single column a QuestDB table is partitioned and sorted by, chosen at table creation, which every time-based query and partition strategy depends on. “You can’t change the designated timestamp after the table’s created without a full rebuild — pick the column that actually represents event time, not ingestion time, up front.”
Symbol type — a specialized column type for low-cardinality repeated strings (like exchange or sensor_id), stored internally as an efficient dictionary-encoded value instead of a raw string.
“Switch that instrument code column from VARCHAR to SYMBOL — with only forty distinct values repeated across billions of rows, it’ll cut both storage and query time significantly.”
Out-of-order ingestion — QuestDB’s ability to accept rows that arrive after later-timestamped rows have already been written, common with distributed producers, and still keep the table correctly time-ordered. “We don’t need to buffer and sort upstream anymore — QuestDB handles out-of-order ingestion natively, so late-arriving ticks land in the right place automatically.”
ILP (InfluxDB Line Protocol) — the lightweight text-based ingestion protocol QuestDB supports for high-throughput writes, distinct from issuing SQL INSERT statements for every row. “For this volume of ticks, don’t use SQL inserts at all — write over ILP, it’s built specifically for high-frequency append-only ingestion.”
SAMPLE BY — a SQL clause for downsampling time-series data into fixed intervals (like every five minutes) with an aggregate, without hand-writing bucketing logic. “Instead of a manual GROUP BY on a truncated timestamp, use SAMPLE BY 5m — it’s built for exactly this kind of time-bucketed aggregation and runs faster.”
Common Phrases
- “What’s the designated timestamp on this table, and does it reflect event time or ingestion time?”
- “Should this column be a SYMBOL type given how few distinct values it has?”
- “Are we relying on out-of-order ingestion here, or do producers need to guarantee ordering upstream?”
- “Is this write path using ILP, or are we issuing individual SQL inserts at high volume?”
- “Can this aggregation be rewritten with SAMPLE BY instead of a manual time-bucket GROUP BY?”
Example Sentences
Reviewing a pull request: “This inserts one row at a time over the SQL interface for a firehose of sensor data — switch the ingestion path to ILP before this becomes a bottleneck.”
Explaining a design decision: “We picked event time as the designated timestamp instead of ingestion time, since late-arriving data from flaky sensors needs to land in its correct historical slot, not wherever it happened to arrive.”
Describing an incident: “Storage ballooned because the exchange code column was left as VARCHAR — converting it to SYMBOL after the fact cut disk usage by more than half.”
Professional Tips
- Say “designated timestamp” precisely, not just “the timestamp column” — it’s the specific column driving partitioning and query performance, and getting it wrong at table creation is costly to fix.
- When reviewing schema for high-cardinality-looking-but-actually-low-cardinality fields, ask “should this be SYMBOL?” — it’s an easy, high-impact optimization reviewers should flag by habit.
- Use “ILP” by name when discussing ingestion paths — it distinguishes a purpose-built high-throughput protocol from ordinary SQL writes in design discussions.
- Mention SAMPLE BY explicitly when someone proposes hand-rolled time bucketing — it’s usually both simpler and faster than the manual equivalent.
Practice Exercise
- Explain in two sentences why the designated timestamp choice matters for a QuestDB table.
- Write a one-sentence code review comment recommending a column be converted to SYMBOL type.
- Describe, in your own words, what out-of-order ingestion means and why it matters for distributed producers.