QuestDB 8.0: Major Release

Tags:
QuestDB is the world's fast growing time-series database. It offers premium ingestion throughput, enhanced SQL analytics that can power through analysis, and cost-saving hardware efficiency. It's open source and integrates with many tools and languages.

QuestDB gets a major version bump.

8.0 blends deep improvements with helpful new functions.

Without further ado, let's take a look at the core additions.

P E R F O R M A N C E

Performance is something of an internal obsession. When compared to competitors (1, 2) we already match up very well. But leading performance is a journey without a destination. As such, through a series of compounding optimizations, we see an average of 50% faster query speeds when looking at our Clickbench total benchmarks.

A picture of QuestDB out-performing TimescaleDB by many
multiples in most queries.
QuestDB 8.0 partitioned vs. unpartitioned vs TimescaleDB

Contributing to this improvement, in addition to a set of under-the-hood updates, are the following major features.

Compression for OSS

Previously, system-level compression was available only within QuestDB Enterprise. We're pleased to announce that compression is available within open source and can be used today. To get you up-and-running quick, we have a short guide.

Compression is provided via ZFS, and we expect at least a 6x reduction in storage utilization. But system-level compression is one aspect of lowering disk usage. Another aspect is reducing the size of the files generated by the database.

And to that tune, we'll introduce VARCHAR.

VARCHAR replaces STRING

For those unfamiliar, VARCHAR stands for variable character. It has been an integral part of SQL since near its inception. Its adoption in QuestDB provides benefits over the existing STRING type:

FeatureVARCHARSTRING
EncodingUTF-8UTF-16
StorageTypically lower storage requirementsHigher storage requirements
OptimizationOptimized for common operations (filtering, sorting)Not optimized for modern use cases
RecommendationRecommended for new tablesConsidered a legacy type, not recommended for new tables
CompatibilityCompatible with newer versions of QuestDBKept for compatibility with older versions, may be deprecated

When a column uses VARCHAR, we expect improved performance and storage utilization. In partnership with compression, this means that the oft large fields of text create an all-together much smaller footprint. And that smaller footprint means faster, more efficient queries.

As SSD costs balloon and are set to continue rising, efficiency is more important. For those looking to turn down the temperature of their bills, consider looking at QuestDB - its performance relative to low hardware constantly improves.

But back to VARCHAR: What if you already use the STRING type?

ALTER TABLE COLUMN TYPE

Before we outline the syntax, it's important to consider table alterations as sensitive operations. If a table's column type is changed, but the data it received does not match the new type, then there's going to be issues! And not all types are capable of conversion, however most of the common cases are covered.

To convert an existing STRING column to VARCHAR:

Convert a column from STRING to VARCHAR
ALTER TABLE
example_table
ALTER COLUMN
example_column TYPE VARCHAR;

You may also include parameters such as CAPACITY & INDEX.

Read more about ALTER TABLE COLUMN TYPE in our documentation.

Functional Finance

Many cutting-edge financial institutions leverage QuestDB for time-series data. To better support the financial use-case, we offer finance-specific functions.

One such function is the Level-2 Price function.

Level-2 market data provides a detailed view of the order book for a given asset. It displays both the prices at which buyers and sellers are willing to trade, and the quantities available at each price level.

It is "Level-2" because it shows the full range of bid (buy) and ask (sell) orders, not just the highest bid and lowest ask as in "Level-1" data. It can help analysts determine the strength and momentum of the market, or find points of resistance.

It's essential for high-volume, high-speed trading, and it's all wrapped up in a nice function:

The l2price() function
SELECT
l2price(target_quantity, quantity_1, price_1, quantity_2, price_2, ..., quantity_n, price_n);

For more information, see our Finance documentation.

Join the community

QuestDB 8.0 came together through a lot of hardwork and communication with our growing community. If you have any feedback or questions, or want to provide feedback towards our roadmap, please visit us in our Community Forum.

Subscribe to our newsletters for the latest. Secure and never shared or sold.