2026-01-23

Ankündigung: Vortex-Unterstützung in DuckDB

Guillermo Sanchez, SpiralDB Team

Ich denke, es lohnt sich, diese Einleitung mit ein paar Worten zum etablierten Format für spaltenorientierte Daten zu beginnen. Parquet hat Erstaunliches für die Analytik geleistet. Wer sich noch an die Zeiten erinnert, in denen CSV die bessere Alternative war, weiß, wie wichtig Parquet ist. Auch wenn sich die Spezifikation weiterentwickelt hat, hat Parquet Design-Einschränkungen. Eine besondere Einschränkung: Es ist blockkomprimiert, und Engines müssen Pages dekomprimieren, bevor sie weiter filtern, Werte dekodieren usw. können. Seit einiger Zeit arbeiten Forscher und Unternehmen an Alternativen zu Parquet, die einige dieser Schwächen verbessern. Vortex vom SpiralDB-Team ist eine davon.

Was ist Vortex?

Vortex ist ein erweiterbares Open-Source-Format für spaltenorientierte Daten. Es entstand, um heterogene Compute-Muster und unterschiedliche Datenmodalitäten zu bedienen. Aber was heißt das?

Das Projekt wurde im August 2025 vom SpiralDB-Team an die Linux Foundation gespendet.

Vortex bietet unterschiedliche Layouts und Encodings für verschiedene Datentypen. Zu den bemerkenswertesten gehören ALP für Gleitkomma-Encoding oder FSST für String-Encoding. Diese leichtgewichtige Kompressionsstrategie hält Datengrößen klein und ermöglicht gleichzeitig eines der wichtigsten Features von Vortex: Compute-Funktionen. Weil das kodierte Layout der Daten bekannt ist, kann Vortex beliebige Ausdrücke auf komprimierten Daten ausführen. So kann ein Vortex-Reader zum Beispiel Filterausdrücke in Storage-Segmenten ausführen, ohne Daten zu dekomprimieren.

Wir erwähnen heterogene Compute, um zu betonen, dass Vortex mit der Idee optimierter Layouts für unterschiedliche Datentypen entworfen wurde – einschließlich Vektoren, großem Text oder sogar Bild und Audio – aber auch, um CPU- oder GPU-Sättigung zu maximieren. Die Idee: Dekompression wird bis ganz zur GPU oder CPU aufgeschoben und ermöglicht, was Vortex „late materialization“ nennt. Das FastLanes-Encoding, ein Projekt mit Ursprung am CWI (wie DuckDB), ist einer der Haupttreiber hinter diesem Feature.

Vortex unterstützt außerdem dynamisch geladene Bibliotheken (ähnlich DuckDB-Extensions), um neue Encodings für bestimmte Typen sowie spezifische Compute-Funktionen bereitzustellen, z. B. für Geodaten. Ein weiteres sehr interessantes Feature ist das Einbetten von WebAssembly in die Datei, sodass der Reader von spezifischen Compute-Kernels für die Datei profitieren kann.

Neben DuckDB bieten bereits andere Engines wie DataFusion, Spark und Arrow eine Integration mit Vortex.

Mehr Informationen finden Sie in der Vortex-Dokumentation.

Die DuckDB-Vortex-Erweiterung

DuckDB ist eine Datenbank, ja, wie der Name sagt – aber sie wird auch weithin als Engine genutzt, um viele verschiedene Datenquellen abzufragen. Über Kern- oder Community-Extensions kann DuckDB integrieren mit:

Die Community ist sehr kreativ geworden: Heutzutage können Sie mit DuckDB sogar YAML und Markdown über Community Extensions lesen.

All das ist möglich dank des DuckDB-Extension-Systems, das es relativ einfach macht, Logik für unterschiedliche Dateiformate oder externe Systeme umzusetzen.

Das SpiralDB-Team hat eine DuckDB-Erweiterung gebaut. Zusammen mit dem DuckLabs-Team haben wir die Erweiterung als Kern-DuckDB-Erweiterung verfügbar gemacht, damit die Community Vortex als First-Class-Citizen in DuckDB nutzen kann.

Beispielnutzung

Installation und Nutzung der Vortex-Erweiterung sind sehr einfach:

INSTALL vortex;
LOAD vortex;

Danach können Sie sie ähnlich wie andere Erweiterungen wie Parquet zum Lesen und Schreiben nutzen.

SELECT * FROM read_vortex('my.vortex');
COPY (SELECT * FROM generate_series(0, 3) t(i))
TO 'my.vortex' (FORMAT vortex);

Warum Vortex und DuckDB?

Vortex beansprucht, vor allem bei drei Use Cases gut zu sein:

Das Versprechen effizienterer I/O und Speichernutzung durch späte Dekompression ist ein guter Grund, DuckDB und Vortex für SQL-Analytics auszuprobieren. Wenn Sie außerdem Analytics auf einheitlichen Datensätzen fahren, die für mehrere Use Cases genutzt werden, einschließlich Preprocessing-Pipelines und KI-Training, kann Vortex ein guter Kandidat sein, weil es genau für diese Bandbreite entworfen wurde.

Performance-Experiment

Für alle Zahlenhungrigen haben wir einen TPC-H-Benchmark Scale Factor 100 mit DuckDB ausgeführt, um zu verstehen, wie Vortex als Storage-Format im Vergleich zu Parquet abschneidet. Wir haben versucht, den Benchmark so fair wie möglich zu machen. Das sind die Parameter:

Die Ergebnisse sind sehr gut. Der TPC-H-Benchmark läuft 18 % schneller gegenüber Parquet V2 und 35 % schneller als Parquet V1 (gemessen am geometrischen Mittel, dem empfohlenen Ansatz).

Ein weiteres interessantes Ergebnis ist die Standardabweichung über die Läufe. Bei Parquet gab es einen erheblichen Unterschied zwischen dem ersten (und kältesten) Lauf jeder Abfrage und den Folgeläufen, während Vortex über alle Läufe sehr gut abschnitt – mit deutlich kleinerer Standardabweichung.

summary

Format Geometric Mean (s) Arithmetic Mean (s) Avg Std Dev (s) Total Time (s)
parquet_v1 2.324712 2.875722 0.145914 63.265881
parquet_v2 1.839171 2.288013 0.182962 50.336281
vortex 1.507675 1.991289 0.078893 43.808349

Die Zeiten schwankten zwischen verschiedenen Läufen desselben Benchmarks, und Folgeläufe haben ähnliche Ergebnisse mit leichten Abweichungen geliefert. Die Unterschiede zwischen Parquet v2 und Vortex lagen immer bei etwa 12–18 % im geometrischen Mittel und etwa 8–14 % in den Gesamtzeiten. Benchmarking ist sehr schwer!

Klicken Sie hier für eine detailliertere Aufschlüsselung der Benchmark-Ergebnisse.

Diese Abbildung zeigt die Ergebnisse pro Abfrage, einschließlich der Standardabweichungs-Fehlerbalken.
mean_per_query
Das Folgende ist die Zusammenfassung der Datensatzgrößen. Hinweis: Sowohl Parquet v1 als auch v2 nutzen die Standardkompression des DuckDB-Parquet-Writers, nämlich Snappy. Vortex nutzt in diesem Fall keine Allzweckkompression, bleibt bei den Datengrößen aber konkurrenzfähig.

Table parquet_v1 parquet_v2 vortex
customer 1.15 0.99 1.06
lineitem 21.15 16.02 18.14
nation 0.00 0.00 0.00
orders 6.02 4.54 5.03
part 0.59 0.47 0.54
partsupp 4.07 3.33 3.72
region 0.00 0.00 0.00
supplier 0.07 0.06 0.07
total 33.06 25.40 28.57

Fazit

Vortex ist eine sehr interessante Alternative zu etablierten spaltenorientierten Formaten wie Parquet. Der Fokus auf leichtgewichtige Kompressions-Encodings, späte Dekompression und Compute-Ausdrücke auf komprimierten Daten macht es für eine breite Palette von Use Cases interessant. Mit Blick auf DuckDB sehen wir, dass Vortex für analytische Abfragen bereits sehr performant ist und auf den TPC-H-Benchmark-Abfragen auf Augenhöhe oder besser als Parquet v2 liegt.

Vortex ist seit Version 0.36.0 rückwärtskompatibel, die vor mehr als 6 Monaten erschienen ist. Vortex steht jetzt bei Version 0.56.0.