Welcome to QuestDB 4.0.0 Release Notes
Before you continue, some keywords we used and their meaning:
CAIRO - storage engine
GRIFFIN - SQL engine
STD - QuestDB standard libraries
Whats new?
-
PostgresSQL wire server implementation (BETA)
-
GRIFFIN: new algo for
sample by .. fill none
without key. It executes a little faster than generic algo. -
GRIFFIN:
order by
implementation for cursors without random access to rows. -
GRIFFIN:
group by
implementation -
GRIFFIN: support multiple columns in
latest by
clause -
GRIFFIN: renamed
to_char
for date and timestamp toto_str
to make them easier to find -
GRIFFIN: optimised
and
andor
operators to recognise constant conditions better and avoid unnecessary data processing. -
GRIFFIN:
=
implementation for SYMBOL = CHAR and STRING = CHAR -
GRIFFIN: 'sum' performance optimisation
-
Network: ability to set multicast TTL and bind port for unicast
-
GRIFFIN: "insert into ... values" implementation
-
GRIFFIN: implementation of 'select count() from table' that would use result of base.size() when its available. This speed up exploratory 'count()' queries dramatically
-
GRIFFIN: UNION and UNION ALL implementations and tests
-
GRIFFIN: "splice join" implementation
-
GRIFFIN: alter table drop column SQL implementation
-
GRIFFIN: SQL
limit
implementation -
GRIFFIN:
INNER
,OUTER
,AS OF
join implementation -
CAIRO: "remove partition" API on TableWriter
-
CAIRO: new LONG256 data type
-
STD: ARM64 Linux support and binary
-
HTTP server implementation. The server is able to send and receive unlimited amount of data from and to data store.
-
STD: Os.currentTimeNanos() system clock in nanosecond resolution (not to be confused with System.nanoTime())
-
STD: (network) set/get TCP_NODELAY
-
STD: (network) implementation of interrupt for blocking accept()
-
STD: (network) bridge to native IP_MULTICAST_LOOP and IP_MULTICAST_IF
-
STD: (network) connect() and configureNoLinger() bridges
-
STD: (network) SO_REUSEADDR and SO_REUSEPORT bridges
-
STD: (log) implemented log writer that can roll files on size and/or date.
-
LineProtoSender can now be bound to a specific interface. It also receives IP addresses as inti n order to offload dealing with address parsing errors somewhere else.
-
STD: (threading) available() method is made available only on SP- and SC- sequences. available() is new to SPSequence and allows bulk publishing and enables higher queue throughput STD: Worker can have CPU affinity now
Whats changed?
- new top level package name! This is a breaking change. We wanted to make package name consistent with our product web site.
What did we fix?
- logging OS error code whenever close(fd) fails.
null
for symbol value now corresponds to null for int. This removes unnecessary complexity around implementing getInt()- fixed transactional behaviour of TableWriter.truncate(). TableReader will now process this event correctly.
- CAIRO: TableWriter maintains minTimestamp so that TableReader doesn't have to count directories to determine data interval
- CAIRO: TableReader no longer relies on partition directories to be removed in order to remove logical data chunk. This is necessary for Windows where open files cannot be removed.
- CAIRO: ByteSequence could allow reading beyond the size of the blob.
- get/set lastModified on Windows could set incorrect time
- fixed TextImportProcessor resume function
- Files.exists() does not use Files.getLastModified() anymore
- network send() and recv() on Linux did not handle errors correctly, which sometimes results in broken wire protocols.
- Numbers.parseInt() could overflow without throwing exception
- Removed garbage-generating lambdas.
- CAIRO: SymbolTable reload could produce an exception