SlideShare a Scribd company logo
Ingesting over four million rows per
second on a single database instance
Javier Ramirez
@supercoco9
About me: I like databases & open source
2022- today. Developer relations at an open source database vendor
● QuestDB, PostgreSQL, MongoDB, Timescale, InfluxDB, Apache Flink
2019-2022. Data & Analytics specialist at a cloud provider
● Amazon Aurora, Neptune, Athena, Timestream, DynamoDB, DocumentDB, Kinesis Data Streams, Kinesis Data Analytics, Redshift,
ElastiCache for Redis, QLDB, ElasticSearch, OpenSearch, Cassandra, Spark…
2013-2018. Data Engineer/Big Data & Analytics consultant
● PostgreSQL, Redis, Neo4j, Google BigQuery, BigTable, Google Cloud Spanner, Apache Spark, Apache BEAM, Apache Flink, HBase, MongoDB,
Presto
2006-2012 - Web developer
● MySQL, Redis, PostgreSQL, Sqlite, ElasticSearch
late nineties to 2005. Desktop/CGI/Servlets/ EJBs/CORBA
● MS Access, MySQL, Oracle, Sybase, Informix
As a student/hobbyist (late eighties - early nineties)
● Amsbase, DBase III, DBase IV, Foxpro, Microsoft Works, Informix
The pre-SQL years
The licensed SQL period
The libre and open SQL
revolution / The NoSQL
rise
The hadoop dark ages / The
python hegemony/ The cloud
database big migrations
The streaming era/ The
database as a service
singularity
The SQL revenge/ the
realtime database/the
embedded database
Some things I will talk about
● Accept you are not PostgreSQL. You are not for everyone and cannot do everything
● Make the right assumptions
● Take advantage of modern hardware and operating systems
● Obsess about storage
● Reduce/control your dependencies
● Measure-implement-repeat continuously to improve performance
Ingesting Over Four Million Rows Per Second With QuestDB Timeseries Database - Berlin Buzzwords
We would like to be known for:
● Performance
○ Better performance with smaller machines
● Developer Experience
● Proudly Open Source (Apache 2.0)
But I don’t need 4 million rows per second
Good, because you
probably aren’t getting
them.
8
Quick ingestion demo
Try out query performance on open datasets
https://demo.questdb.io/
All benchmarks are lies (but they give us a ballpark)
Ingesting over 1.4 million rows per second (using 5 CPU threads)
https://questdb.io/blog/2021/05/10/questdb-release-6-0-tsbs-benchmark/
While running queries scanning over 4 billion rows per second (16 CPU threads)
https://questdb.io/blog/2022/05/26/query-benchmark-questdb-versus-clickhouse-timescale/
Time-series specialised benchmark
https://github.com/questdb/tsbs
Ingesting Over Four Million Rows Per Second With QuestDB Timeseries Database - Berlin Buzzwords
https://questdb.io/blog/optimizing-optimizer-time-series-benchmark-suite/
https://github.com/questdb/questdb/releases/tag/7.0.1 (feb 23)
If you can use only one
database for everything,
go with PostgreSQL
Ingesting Over Four Million Rows Per Second With QuestDB Timeseries Database - Berlin Buzzwords
Ingesting Over Four Million Rows Per Second With QuestDB Timeseries Database - Berlin Buzzwords
Not all (big) (or fast)
data problems are the
same
Do you have a time-series problem? Write patterns
● You mostly insert data. You rarely update or delete individual rows
● It is likely you write data more frequently than you read data
● Since data keeps growing, you will very likely end up with much bigger
data than your typical operational database would be happy with
● Your data origin might experience bursts or lag, but keeping the correct
order of events is important to you
● Both ingestion and querying speed are critical for your business
Do you have a time-series problem? Read patterns
● Most of your queries are scoped to a time range
● You typically access recent/fresh data rather than older data
● But still want to keep older data around for occasional analytics
● You often need to resample your data for aggregations/analytics
● You often need to align timestamps from multiple data series
We can make many
assumptions about the shape
of the data and usage patterns
Data will most often be queried in a continuous range, and recent data will be preferred =>
Store data physically sorted by “designated timestamp” on disk (deal with out of order
data)
Store data in partitions, so we can skip a lot of data quickly
Aggressive use of prefetching by the file system
Most queries are not a select *, but aggregations on timestamp + a few columns =>
Columnar storage model. Open only the files for the column the query needs
Most rows will have some sort of non-unique ID (string or numeric) to scope on =>
Special Symbol type, looks like a String, behaves like a Number. Faster and smaller
Some assumptions when reading data
Data will be fast and continuous =>
Keep (dynamic and configurable) buffers to reduce write operations
Slower reads should not slow down writes =>
Shared CPU/threads pool model, with default separate thread for ingestion and
possibility to dedicate threads for parsing or other tasks
Stale data is useful, but longer latencies are fine =>
Allow mounting old partitions on slower/cheaper drives
Old data needs to be removed eventually =>
Allow unmounting/deleting partitions (archiving into object storage in the roadmap)
Some assumptions when writing data
Queries should allow for reasonably complex filters and aggregations =>
Implement SQL, with pg-wire compatibility for compatibility
Writes should be fast. Also, some users might be already using other TSDB =>
Implement the Influx Line Protocol (ILP) for speed and compatibility. Provide client
libraries, as ILP is not as popular
Many integrations might be from IoT or simple devices with bash scripting =>
Implement HTTP endpoint for querying, importing, and exporting data
Operations teams will want to read QuestDB metrics, not stored data
Implement health and metrics endpoint, with Prometheus compatibility
Some assumptions when connecting
Say no to
nice-to-have
features that
would degrade
performance
But also say yes
When it makes
sense
Technical decisions and trade offs
Java memory
management
Native unsafe memory. Shared across languages and OS
Java
C/C++
Rust *
Mmap
https://db.cs.cmu.edu/mmap-cidr2022/
* https://github.com/questdb/rust-maven-plugin
SIMD vectorization and own JIT compiler
Single Instruction, multiple Data (SIMD):
parallelizes/vectorizes operations in multiple
registers. QuestDB only supports it on Intel and AMD
processors.
JIT compiler: compiles SQL statements
EXPLAIN: helps understand execution plans and
vectorization
31
SELECT count(), max(total_amount),
avg(total_amount)
FROM trips
WHERE total_amount > 150 AND passenger_count = 1;
(Trips table has 1.6 billion rows and
24 columns, but we only access 2 of
them)
You can try it live at
https://demo.questdb.io
Re-implement the JAVA std library
● Java Classes work with heap memory. We need off-heap
● JAVA classes tend to do too many things (they are
generic) and a lot of type conversions
● This includes IO, logging, atomics, collections… using zero
GC and native memory
● Zero Dependencies (except for testing) on our pom.xml
Ingesting Over Four Million Rows Per Second With QuestDB Timeseries Database - Berlin Buzzwords
How would *YOU* efficiently sort a multi GB
unordered CSV file?
Ingesting Over Four Million Rows Per Second With QuestDB Timeseries Database - Berlin Buzzwords
Some things we are trying out next for performance
● Compression, and exploring data formats like arrow/ parquet
● Own ingestion protocol
● Embedding Julia in the database for custom code/UDFs
● Moving some parts to Rust
● Second level partitioning
● Improved vectorization of some operations (group by multiple
columns or by expressions
● Add specific joins optimizations (index nested loop joins, for
example)
https://github.com/questdb/questdb
https://questdb.io/cloud/
More info
https://questdb.io
https://demo.questdb.io
https://github.com/javier/questdb-quickstart
We 💕 contributions and ⭐ stars
github.com/questdb/questdb
THANKS!
Javier Ramirez, Head of Developer Relations at QuestDB, @supercoco9

More Related Content

Similar to Ingesting Over Four Million Rows Per Second With QuestDB Timeseries Database - Berlin Buzzwords (20)

PDF
QuestDB: The building blocks of a fast open-source time-series database
javier ramirez
 
PPTX
Modernizing Mission-Critical Apps with SQL Server
Microsoft Tech Community
 
PDF
Your Database Cannot Do this (well)
javier ramirez
 
PDF
Fast data in times of crisis with GPU accelerated database QikkDB | Business ...
Matej Misik
 
KEY
Non-Relational Databases at ACCU2011
Gavin Heavyside
 
PDF
Time-Series and Analytical Databases Walk Into a Bar...
ScyllaDB
 
PDF
Internals of Presto Service
Treasure Data, Inc.
 
PDF
High performance json- postgre sql vs. mongodb
Wei Shan Ang
 
PDF
PostgreSQL performance archaeology
Tomas Vondra
 
PPTX
Lessons learned from designing a QA Automation for analytics databases (big d...
Omid Vahdaty
 
PDF
Drill architecture 20120913
jasonfrantz
 
PPTX
JasperWorld 2012: Reinventing Data Management by Max Schireson
MongoDB
 
PDF
Database Systems Performance Evaluation for IoT Applications
ijdmsjournal
 
PDF
DATABASE SYSTEMS PERFORMANCE EVALUATION FOR IOT APPLICATIONS
IJDMS
 
PPTX
PostgreSQL as an Alternative to MSSQL
Alexei Krasner
 
PDF
Hybrid solutions – combining in memory solutions with SSD - Christos Erotocritou
JAXLondon_Conference
 
PDF
From a student to an apache committer practice of apache io tdb
jixuan1989
 
PDF
Storage Methods for Nonstandard Data Patterns
Bob Burgess
 
PDF
Relational vs. Non-Relational
PostgreSQL Experts, Inc.
 
PDF
Transforming the Database: Critical Innovations for Performance at Scale
ScyllaDB
 
QuestDB: The building blocks of a fast open-source time-series database
javier ramirez
 
Modernizing Mission-Critical Apps with SQL Server
Microsoft Tech Community
 
Your Database Cannot Do this (well)
javier ramirez
 
Fast data in times of crisis with GPU accelerated database QikkDB | Business ...
Matej Misik
 
Non-Relational Databases at ACCU2011
Gavin Heavyside
 
Time-Series and Analytical Databases Walk Into a Bar...
ScyllaDB
 
Internals of Presto Service
Treasure Data, Inc.
 
High performance json- postgre sql vs. mongodb
Wei Shan Ang
 
PostgreSQL performance archaeology
Tomas Vondra
 
Lessons learned from designing a QA Automation for analytics databases (big d...
Omid Vahdaty
 
Drill architecture 20120913
jasonfrantz
 
JasperWorld 2012: Reinventing Data Management by Max Schireson
MongoDB
 
Database Systems Performance Evaluation for IoT Applications
ijdmsjournal
 
DATABASE SYSTEMS PERFORMANCE EVALUATION FOR IOT APPLICATIONS
IJDMS
 
PostgreSQL as an Alternative to MSSQL
Alexei Krasner
 
Hybrid solutions – combining in memory solutions with SSD - Christos Erotocritou
JAXLondon_Conference
 
From a student to an apache committer practice of apache io tdb
jixuan1989
 
Storage Methods for Nonstandard Data Patterns
Bob Burgess
 
Relational vs. Non-Relational
PostgreSQL Experts, Inc.
 
Transforming the Database: Critical Innovations for Performance at Scale
ScyllaDB
 

More from javier ramirez (20)

PDF
How We Added Replication to QuestDB - JonTheBeach
javier ramirez
 
PDF
¿Se puede vivir del open source? T3chfest
javier ramirez
 
PDF
Como creamos QuestDB Cloud, un SaaS basado en Kubernetes alrededor de QuestDB...
javier ramirez
 
PDF
Deduplicating and analysing time-series data with Apache Beam and QuestDB
javier ramirez
 
PDF
QuestDB-Community-Call-20220728
javier ramirez
 
PDF
Processing and analysing streaming data with Python. Pycon Italy 2022
javier ramirez
 
PDF
Servicios e infraestructura de AWS y la próxima región en Aragón
javier ramirez
 
PPTX
Primeros pasos en desarrollo serverless
javier ramirez
 
PDF
How AWS is reinventing the cloud
javier ramirez
 
PDF
Analitica de datos en tiempo real con Apache Flink y Apache BEAM
javier ramirez
 
PDF
Getting started with streaming analytics
javier ramirez
 
PDF
Getting started with streaming analytics: Setting up a pipeline
javier ramirez
 
PDF
Getting started with streaming analytics: Deep Dive
javier ramirez
 
PDF
Getting started with streaming analytics: streaming basics (1 of 3)
javier ramirez
 
PPTX
Monitorización de seguridad y detección de amenazas con AWS
javier ramirez
 
PPTX
Consulta cualquier fuente de datos usando SQL con Amazon Athena y sus consult...
javier ramirez
 
PDF
Recomendaciones, predicciones y detección de fraude usando servicios de intel...
javier ramirez
 
PDF
Open Distro for ElasticSearch and how Grimoire is using it. Madrid DevOps Oct...
javier ramirez
 
PPTX
Re:Invent 2019 Recap. AWS User Groups in Spain. Javier Ramirez
javier ramirez
 
PPTX
Re:Invent 2019 Recap. AWS User Group Zaragoza. Javier Ramirez
javier ramirez
 
How We Added Replication to QuestDB - JonTheBeach
javier ramirez
 
¿Se puede vivir del open source? T3chfest
javier ramirez
 
Como creamos QuestDB Cloud, un SaaS basado en Kubernetes alrededor de QuestDB...
javier ramirez
 
Deduplicating and analysing time-series data with Apache Beam and QuestDB
javier ramirez
 
QuestDB-Community-Call-20220728
javier ramirez
 
Processing and analysing streaming data with Python. Pycon Italy 2022
javier ramirez
 
Servicios e infraestructura de AWS y la próxima región en Aragón
javier ramirez
 
Primeros pasos en desarrollo serverless
javier ramirez
 
How AWS is reinventing the cloud
javier ramirez
 
Analitica de datos en tiempo real con Apache Flink y Apache BEAM
javier ramirez
 
Getting started with streaming analytics
javier ramirez
 
Getting started with streaming analytics: Setting up a pipeline
javier ramirez
 
Getting started with streaming analytics: Deep Dive
javier ramirez
 
Getting started with streaming analytics: streaming basics (1 of 3)
javier ramirez
 
Monitorización de seguridad y detección de amenazas con AWS
javier ramirez
 
Consulta cualquier fuente de datos usando SQL con Amazon Athena y sus consult...
javier ramirez
 
Recomendaciones, predicciones y detección de fraude usando servicios de intel...
javier ramirez
 
Open Distro for ElasticSearch and how Grimoire is using it. Madrid DevOps Oct...
javier ramirez
 
Re:Invent 2019 Recap. AWS User Groups in Spain. Javier Ramirez
javier ramirez
 
Re:Invent 2019 Recap. AWS User Group Zaragoza. Javier Ramirez
javier ramirez
 
Ad

Recently uploaded (20)

PPTX
apidays Helsinki & North 2025 - Vero APIs - Experiences of API development in...
apidays
 
PPTX
Exploring Multilingual Embeddings for Italian Semantic Search: A Pretrained a...
Sease
 
PDF
The European Business Wallet: Why It Matters and How It Powers the EUDI Ecosy...
Lal Chandran
 
PDF
R Cookbook - Processing and Manipulating Geological spatial data with R.pdf
OtnielSimopiaref2
 
PDF
Context Engineering for AI Agents, approaches, memories.pdf
Tamanna
 
PDF
Choosing the Right Database for Indexing.pdf
Tamanna
 
PPTX
apidays Helsinki & North 2025 - API access control strategies beyond JWT bear...
apidays
 
PPTX
apidays Singapore 2025 - Designing for Change, Julie Schiller (Google)
apidays
 
PDF
apidays Helsinki & North 2025 - API-Powered Journeys: Mobility in an API-Driv...
apidays
 
PDF
Product Management in HealthTech (Case Studies from SnappDoctor)
Hamed Shams
 
PDF
OPPOTUS - Malaysias on Malaysia 1Q2025.pdf
Oppotus
 
PDF
Web Scraping with Google Gemini 2.0 .pdf
Tamanna
 
PPTX
apidays Singapore 2025 - The Quest for the Greenest LLM , Jean Philippe Ehre...
apidays
 
PPTX
ER_Model_with_Diagrams_Presentation.pptx
dharaadhvaryu1992
 
PDF
apidays Helsinki & North 2025 - Monetizing AI APIs: The New API Economy, Alla...
apidays
 
PDF
Building Production-Ready AI Agents with LangGraph.pdf
Tamanna
 
PPTX
SlideEgg_501298-Agentic AI.pptx agentic ai
530BYManoj
 
PDF
Data Chunking Strategies for RAG in 2025.pdf
Tamanna
 
PPTX
apidays Helsinki & North 2025 - From Chaos to Clarity: Designing (AI-Ready) A...
apidays
 
PDF
Simplifying Document Processing with Docling for AI Applications.pdf
Tamanna
 
apidays Helsinki & North 2025 - Vero APIs - Experiences of API development in...
apidays
 
Exploring Multilingual Embeddings for Italian Semantic Search: A Pretrained a...
Sease
 
The European Business Wallet: Why It Matters and How It Powers the EUDI Ecosy...
Lal Chandran
 
R Cookbook - Processing and Manipulating Geological spatial data with R.pdf
OtnielSimopiaref2
 
Context Engineering for AI Agents, approaches, memories.pdf
Tamanna
 
Choosing the Right Database for Indexing.pdf
Tamanna
 
apidays Helsinki & North 2025 - API access control strategies beyond JWT bear...
apidays
 
apidays Singapore 2025 - Designing for Change, Julie Schiller (Google)
apidays
 
apidays Helsinki & North 2025 - API-Powered Journeys: Mobility in an API-Driv...
apidays
 
Product Management in HealthTech (Case Studies from SnappDoctor)
Hamed Shams
 
OPPOTUS - Malaysias on Malaysia 1Q2025.pdf
Oppotus
 
Web Scraping with Google Gemini 2.0 .pdf
Tamanna
 
apidays Singapore 2025 - The Quest for the Greenest LLM , Jean Philippe Ehre...
apidays
 
ER_Model_with_Diagrams_Presentation.pptx
dharaadhvaryu1992
 
apidays Helsinki & North 2025 - Monetizing AI APIs: The New API Economy, Alla...
apidays
 
Building Production-Ready AI Agents with LangGraph.pdf
Tamanna
 
SlideEgg_501298-Agentic AI.pptx agentic ai
530BYManoj
 
Data Chunking Strategies for RAG in 2025.pdf
Tamanna
 
apidays Helsinki & North 2025 - From Chaos to Clarity: Designing (AI-Ready) A...
apidays
 
Simplifying Document Processing with Docling for AI Applications.pdf
Tamanna
 
Ad

Ingesting Over Four Million Rows Per Second With QuestDB Timeseries Database - Berlin Buzzwords

  • 1. Ingesting over four million rows per second on a single database instance Javier Ramirez @supercoco9
  • 2. About me: I like databases & open source 2022- today. Developer relations at an open source database vendor ● QuestDB, PostgreSQL, MongoDB, Timescale, InfluxDB, Apache Flink 2019-2022. Data & Analytics specialist at a cloud provider ● Amazon Aurora, Neptune, Athena, Timestream, DynamoDB, DocumentDB, Kinesis Data Streams, Kinesis Data Analytics, Redshift, ElastiCache for Redis, QLDB, ElasticSearch, OpenSearch, Cassandra, Spark… 2013-2018. Data Engineer/Big Data & Analytics consultant ● PostgreSQL, Redis, Neo4j, Google BigQuery, BigTable, Google Cloud Spanner, Apache Spark, Apache BEAM, Apache Flink, HBase, MongoDB, Presto 2006-2012 - Web developer ● MySQL, Redis, PostgreSQL, Sqlite, ElasticSearch late nineties to 2005. Desktop/CGI/Servlets/ EJBs/CORBA ● MS Access, MySQL, Oracle, Sybase, Informix As a student/hobbyist (late eighties - early nineties) ● Amsbase, DBase III, DBase IV, Foxpro, Microsoft Works, Informix The pre-SQL years The licensed SQL period The libre and open SQL revolution / The NoSQL rise The hadoop dark ages / The python hegemony/ The cloud database big migrations The streaming era/ The database as a service singularity The SQL revenge/ the realtime database/the embedded database
  • 3. Some things I will talk about ● Accept you are not PostgreSQL. You are not for everyone and cannot do everything ● Make the right assumptions ● Take advantage of modern hardware and operating systems ● Obsess about storage ● Reduce/control your dependencies ● Measure-implement-repeat continuously to improve performance
  • 5. We would like to be known for: ● Performance ○ Better performance with smaller machines ● Developer Experience ● Proudly Open Source (Apache 2.0)
  • 6. But I don’t need 4 million rows per second
  • 7. Good, because you probably aren’t getting them.
  • 8. 8
  • 10. Try out query performance on open datasets https://demo.questdb.io/
  • 11. All benchmarks are lies (but they give us a ballpark) Ingesting over 1.4 million rows per second (using 5 CPU threads) https://questdb.io/blog/2021/05/10/questdb-release-6-0-tsbs-benchmark/ While running queries scanning over 4 billion rows per second (16 CPU threads) https://questdb.io/blog/2022/05/26/query-benchmark-questdb-versus-clickhouse-timescale/ Time-series specialised benchmark https://github.com/questdb/tsbs
  • 15. If you can use only one database for everything, go with PostgreSQL
  • 18. Not all (big) (or fast) data problems are the same
  • 19. Do you have a time-series problem? Write patterns ● You mostly insert data. You rarely update or delete individual rows ● It is likely you write data more frequently than you read data ● Since data keeps growing, you will very likely end up with much bigger data than your typical operational database would be happy with ● Your data origin might experience bursts or lag, but keeping the correct order of events is important to you ● Both ingestion and querying speed are critical for your business
  • 20. Do you have a time-series problem? Read patterns ● Most of your queries are scoped to a time range ● You typically access recent/fresh data rather than older data ● But still want to keep older data around for occasional analytics ● You often need to resample your data for aggregations/analytics ● You often need to align timestamps from multiple data series
  • 21. We can make many assumptions about the shape of the data and usage patterns
  • 22. Data will most often be queried in a continuous range, and recent data will be preferred => Store data physically sorted by “designated timestamp” on disk (deal with out of order data) Store data in partitions, so we can skip a lot of data quickly Aggressive use of prefetching by the file system Most queries are not a select *, but aggregations on timestamp + a few columns => Columnar storage model. Open only the files for the column the query needs Most rows will have some sort of non-unique ID (string or numeric) to scope on => Special Symbol type, looks like a String, behaves like a Number. Faster and smaller Some assumptions when reading data
  • 23. Data will be fast and continuous => Keep (dynamic and configurable) buffers to reduce write operations Slower reads should not slow down writes => Shared CPU/threads pool model, with default separate thread for ingestion and possibility to dedicate threads for parsing or other tasks Stale data is useful, but longer latencies are fine => Allow mounting old partitions on slower/cheaper drives Old data needs to be removed eventually => Allow unmounting/deleting partitions (archiving into object storage in the roadmap) Some assumptions when writing data
  • 24. Queries should allow for reasonably complex filters and aggregations => Implement SQL, with pg-wire compatibility for compatibility Writes should be fast. Also, some users might be already using other TSDB => Implement the Influx Line Protocol (ILP) for speed and compatibility. Provide client libraries, as ILP is not as popular Many integrations might be from IoT or simple devices with bash scripting => Implement HTTP endpoint for querying, importing, and exporting data Operations teams will want to read QuestDB metrics, not stored data Implement health and metrics endpoint, with Prometheus compatibility Some assumptions when connecting
  • 25. Say no to nice-to-have features that would degrade performance
  • 26. But also say yes When it makes sense
  • 29. Native unsafe memory. Shared across languages and OS Java C/C++ Rust * Mmap https://db.cs.cmu.edu/mmap-cidr2022/ * https://github.com/questdb/rust-maven-plugin
  • 30. SIMD vectorization and own JIT compiler Single Instruction, multiple Data (SIMD): parallelizes/vectorizes operations in multiple registers. QuestDB only supports it on Intel and AMD processors. JIT compiler: compiles SQL statements EXPLAIN: helps understand execution plans and vectorization
  • 31. 31
  • 32. SELECT count(), max(total_amount), avg(total_amount) FROM trips WHERE total_amount > 150 AND passenger_count = 1; (Trips table has 1.6 billion rows and 24 columns, but we only access 2 of them) You can try it live at https://demo.questdb.io
  • 33. Re-implement the JAVA std library ● Java Classes work with heap memory. We need off-heap ● JAVA classes tend to do too many things (they are generic) and a lot of type conversions ● This includes IO, logging, atomics, collections… using zero GC and native memory ● Zero Dependencies (except for testing) on our pom.xml
  • 35. How would *YOU* efficiently sort a multi GB unordered CSV file?
  • 37. Some things we are trying out next for performance ● Compression, and exploring data formats like arrow/ parquet ● Own ingestion protocol ● Embedding Julia in the database for custom code/UDFs ● Moving some parts to Rust ● Second level partitioning ● Improved vectorization of some operations (group by multiple columns or by expressions ● Add specific joins optimizations (index nested loop joins, for example)