2024-06-03
Ankündigung: DuckDB 1.0.0
Mark Raasveldt, Hannes Mühleisen
Um die neue Version zu installieren, besuchen Sie bitte den Installationsleitfaden. Die Release Notes finden Sie auf der Release-Seite.
Es ist fast sechs Jahre her, dass 2018 der erste Quellcode für das Projekt geschrieben wurde, und seitdem ist eine Menge passiert: Es gibt inzwischen über 300 000 Zeilen C++-Engine-Code, über 42 000 Commits und fast 4 000 Issues, die eröffnet und wieder geschlossen wurden. DuckDB hat auch deutlich an Popularität gewonnen: Das Projekt hat Zehntausende Sterne und Follower auf GitHub und Social-Media-Plattformen. Die Downloadzahlen liegen monatlich im Millionenbereich, und allein der Download-Traffic für Extensions beträgt mehr als vier Terabyte pro Tag. Es werden sogar Bücher über DuckDB geschrieben, und – am wichtigsten – selbst Wikipedia hält DuckDB inzwischen für bemerkenswert, wenn auch knapp.
Warum jetzt?
Natürlich sind Versionsnummern etwas willkürlich und „gefühlsmäßig“, trotz Versuchen, sie mechanischer zu machen. Wir hätten DuckDB 1.0.0 schon 2018 veröffentlichen können oder noch zehn Jahre warten. Es gibt nie den perfekten Moment, weil Software (mit Ausnahme von TeX) nie „fertig“ ist. Warum also heute?
Datenmanagementsysteme – selbst rein analytische – sind so zentrale Bestandteile jeder Anwendung, dass immer ein impliziter Vertrauensvertrag zwischen ihren Entwicklern und Nutzern besteht. Nutzer verlassen sich darauf, dass Datenbanken korrekte Abfrageergebnisse liefern und ihre Daten nicht verlieren. Gleichzeitig müssen Systementwickler ihre Verantwortung kennen, Anwendungen nicht einfach so kaputtzumachen. Intuitiv bedeutet Version 1.0.0 für ein Datenmanagementsystem etwas anderes als für eine Eieruhr-App (nichts für ungut). Von Anfang an wollten wir DuckDB zu einer zuverlässigen Basis machen, auf der Menschen ihre Anwendungen aufbauen. Deshalb ist das 1.0.0-Release nach der nicht existierenden Schneente (anas nivis) benannt, in Anlehnung an Apples Snow-Leopard-Release vor einigen Jahren.
Für uns war das Speicherformat einer der großen Blocker für die Veröffentlichung von 1.0.0. DuckDB hat ein eigenes, speziell entwickeltes Datenspeicherformat. Dieses Format erlaubt es Nutzern, viele (möglicherweise sehr große) Tabellen in einer einzelnen Datei mit voller Transaktionssemantik und State-of-the-Art-Kompression zu verwalten. Natürlich ist das Entwerfen eines neuen Dateiformats nicht ohne Herausforderungen, und wir mussten das Format im Laufe der Zeit erheblich ändern. Das führte zur suboptimalen Situation, dass bei jedem neuen DuckDB-Release die mit der alten Version erzeugten Dateien nicht mit der neuen DuckDB-Version funktionierten und manuell aktualisiert werden mussten. Dieses Problem wurde im Februar in v0.10.0 gelöst – dort haben wir Abwärtskompatibilität und begrenzte Vorwärtskompatibilität für DuckDBs Speicherformat eingeführt. Dieses Feature ist inzwischen eine Weile in der Praxis ohne ernsthafte Probleme im Einsatz – das gibt uns die Zuversicht, zu garantieren, dass mit DuckDB 1.0.0 erzeugte DuckDB-Dateien mit zukünftigen DuckDB-Versionen kompatibel bleiben.
Stabilität
Das Leitmotiv des 1.0.0-Releases ist Stabilität. Das unterscheidet es von früheren Releases, zu denen wir Blogposts mit langen Listen neuer Features geschrieben haben. Stattdessen hat das 1.0.0-Release nur sehr wenige neue Features (ein paar könnten sich eingeschlichen haben). Unser Fokus lag auf Stabilität.
Wir haben das geradezu erstaunliche Wachstum in Menge und Breite der DuckDB-Nutzung in der Praxis beobachtet und keinen Anstieg ernsthafter gemeldeter Probleme gesehen. Gleichzeitig laufen jede Nacht Tausende Testfälle mit Millionen Testabfragen. Wir führen zahlreiche Microbenchmarks und standardisierte Benchmark-Suites aus, um Performance-Regressionen zu finden. DuckDB wird ständig von verschiedenen Fuzzern gequält, die alle möglichen wilden SQL-Abfragen konstruieren, damit uns keine merkwürdigen Eckfälle entgehen. Alles zusammen hat uns die nötige Zuversicht gegeben, eine 1.0.0 zu veröffentlichen.
Ein weiterer Kernaspekt der Stabilität mit dem 1.0.0-Release ist Stabilität über Versionen hinweg. Während es wahrscheinlich unmöglich ist, niemandes Workflow jemals zu brechen, wollen wir künftig deutlich vorsichtiger mit nutzerseitigen Änderungen umgehen. Insbesondere wollen wir Stabilität für den SQL-Dialekt und die C-API bieten. Wir garantieren nicht, dass wir die Semantik in diesen Schichten nie ändern – aber wir werden versuchen, dabei ausreichend Vorwarnung zu geben und Workarounds bereitzustellen, damit bisher funktionierender Code weiterläuft.
Ausblick
Anders als viele Open-Source-Projekte hat DuckDB auch eine gesunde langfristige Finanzierungsstrategie. DuckLabs, das Unternehmen, das DuckDBs Kernbeitragende beschäftigt, hat keine externen Investitionen aufgenommen; das Unternehmen gehört vollständig dem Team. Das Geschäftsmodell von Labs ist Beratung und Support für DuckDB, und wir können berichten, dass das gut läuft. Mit den Einnahmen aus Verträgen finanzieren wir langfristige und strategische DuckDB-Entwicklung mit einem Team von fast 20 Personen. Gleichzeitig wird das geistige Eigentum am Projekt von der unabhängigen DuckDB Foundation geschützt. Diese gemeinnützige Stiftung stellt sicher, dass DuckDB langfristig unter der MIT-Lizenz bestehen bleibt.
Was langfristige Pläne angeht, stehen natürlich noch viele Dinge auf der Roadmap. Besonders freuen wir uns darauf, die Extension-Umgebung um DuckDB auszubauen. Extensions sind Plug-ins, die neue SQL-Funktionen, Dateiformate, Optimizer usw. hinzufügen können, während der DuckDB-Kern schlank bleibt. Es gibt bereits eine beeindruckende Zahl von Third-Party-Extensions für DuckDB, und wir arbeiten hart daran, den Prozess zum Bauen und Verteilen von Community-Extensions zu vereinfachen. Wir denken, DuckDB kann zur Basis der nächsten Revolution in der Datenwelt werden – durch Community-Extensions, verbunden über ein hochperformantes Data Fabric, zugänglich über eine einheitliche SQL-Schnittstelle.
Natürlich werden in der heutigen Veröffentlichung Probleme gefunden. Aber seien Sie unbesorgt: Es wird ein 1.0.1-Release geben. Es wird ein 1.1.0 geben. Und irgendwann vielleicht auch ein 2.0.0. Wir sind für die lange Strecke dabei, alle zusammen. Wir haben das Team, die Strukturen und die Ressourcen dafür.
Danksagungen
Zuallererst sind wir Ihnen allen sehr, sehr dankbar. Unser riesiger und herzlicher Dank gilt allen, die Code beigetragen, Issues gemeldet oder an Diskussionen teilgenommen, DuckDB in ihrem Umfeld bekannt gemacht haben – und natürlich allen DuckDB-Nutzern. Ohne Sie hätten wir das nicht geschafft!
Wir danken außerdem der CWI-Gruppe Database Architectures für Umgebung und Expertise zum Bau von DuckDB, den Organisationen, die uns früh Forschungsförderung gegeben haben, den ausgezeichneten Kunden von DuckLabs, die das alles möglich machen (besonders den frühen), und den großzügigen Spendern der DuckDB Foundation. Besonders dankbar sind wir unseren langjährigen Gold-Sponsoren MotherDuck, Voltron Data und Posit.
Schließlich danken wir dem ausgezeichneten und großartigen Team bei DuckLabs.
Kommen Sie also mit uns ins Nostalgische, Rührselige und Vorfreudige auf das, was für DuckDB kommt, und feiern Sie mit uns die Veröffentlichung von DuckDB 1.0.0. Wir tun das sicher.
Mark und Hannes