Qgelm

Ente gut, alles gut? DuckDB ist eine besondere Datenbank

Originalartikel

Backup

<html> <figure class=„aufmacherbild“><img src=„https://heise.cloudimg.io/width/700/q75.png-lossy-75.webp-lossy-75.foil1/_www-heise-de_/imgs/18/4/6/0/8/9/6/6/DuckDB-c22f0904bda004a4.jpeg“ srcset=„https://heise.cloudimg.io/width/700/q75.png-lossy-75.webp-lossy-75.foil1/_www-heise-de_/imgs/18/4/6/0/8/9/6/6/DuckDB-c22f0904bda004a4.jpeg 700w, https://heise.cloudimg.io/width/1050/q75.png-lossy-75.webp-lossy-75.foil1/_www-heise-de_/imgs/18/4/6/0/8/9/6/6/DuckDB-c22f0904bda004a4.jpeg 1050w, https://heise.cloudimg.io/width/1280/q75.png-lossy-75.webp-lossy-75.foil1/_www-heise-de_/imgs/18/4/6/0/8/9/6/6/DuckDB-c22f0904bda004a4.jpeg 1280w“ width=„1280“ height=„720“ sizes=„(min-width: 80em) 43.75em, (min-width: 64em) 66.66vw, 100vw“ alt=„“ class=„img-responsive“ referrerpolicy=„no-referrer“ /><figcaption class=„akwa-caption“>(Bild:&#160;iX / generiert mit ChatGPT)</figcaption></figure><p><strong>DuckDB ist in Version 1.0 erschienen. Was hat es mit dieser Datenbank auf sich, die einiges anders macht als andere Datenbanken?</strong></p><p>Vor kurzem bin ich auf eine Software gesto&#223;en, bei der ich mir gew&#252;nscht h&#228;tte, ich h&#228;tte sie schon viel fr&#252;her kennengelernt. Aber, wie es so sch&#246;n hei&#223;t: besser sp&#228;t als nie. Bei dieser Software handelt es sich um eine etwas ausgefallene Datenbank, die ein paar Dinge anders macht als die &#252;blichen Verd&#228;chtigen. Die Rede ist, und das l&#228;sst sich am Titel dieses Blogposts bereits erahnen, nat&#252;rlich von <a href=„https://duckdb.org/“ rel=„external noopener“ target=„_blank“><strong>DuckDB [1]</strong></a>, deren finale Version 1.0 am Montag vor einer Woche ver&#246;ffentlicht wurde. Das ist ein Grund mehr, einmal einen Blick auf diese Datenbank zu werfen.</p><p>DuckDB stammt aus den Niederlanden und war urspr&#252;nglich ein Uniprojekt. Entwickelt wird die Datenbank seit 2018, also seit inzwischen sechs Jahren. Nun ist es nicht so, als ob es nicht grunds&#228;tzlich schon mehr als genug Datenbanken auf dem Markt g&#228;be, aber bei DuckDB gibt es einige nennenswerte Besonderheiten. Das f&#228;ngt damit an, dass DuckDB im Vergleich zu vielen anderen Datenbanken (wie PostgreSQL, MariaDB, SQL Server oder Oracle) nicht als Client-Server-System angelegt ist, sondern die Datenbank l&#228;uft Embedded und In-Process.</p><h5 id=„nav_in_process_und0“>In-Process und In-Memory</h5><p>Das hei&#223;t, sie l&#228;sst sich nahtlos in eine eigene Anwendung integrieren, sodass die Anwendung die Datenbank-Engine nachher mitbringt: Startet man die Anwendung, ist die Datenbank da. Beendet man die Anwendung, wird auch die Datenbank beendet. Vielleicht erinnert Sie das ein wenig an eine andere In-Process-Datenbank, n&#228;mlich an <a href=„https://www.sqlite.org/“ rel=„external noopener“ target=„_blank“><strong>SQLite [2]</strong></a>. Diese extrem verbreitete Datenbank funktioniert grunds&#228;tzlich genauso, aber es gibt einen ganz gravierenden Unterschied zwischen den beiden. Dazu aber sp&#228;ter mehr.</p><div class=„opt-incontent-container“><h2 class=„opt-intitle“>Empfohlener redaktioneller Inhalt</h2><p class=„opt-indescription“>Mit Ihrer Zustimmmung wird hier ein externes YouTube-Video (Google Ireland Limited) geladen.</p><div class=„opt-incta-container“><label class=„opt-incta-persistence“><input class=„opt-inpersistence-checkbox“ data-should-persist=„“ type=„checkbox“ /> YouTube-Video immer laden</label> <button class=„opt-incta“ data-opt-in=„“>YouTube-Video jetzt laden</button></div><p class=„opt-infootnote“>Ich bin damit einverstanden, dass mir externe Inhalte angezeigt werden. Damit k&#246;nnen personenbezogene Daten an Drittplattformen (Google Ireland Limited) &#252;bermittelt werden. Mehr dazu in unserer <a href=„https://www.heise.de/Datenschutzerklaerung-der-Heise-Medien-GmbH-Co-KG-4860.html“><strong>Datenschutzerkl&#228;rung [3]</strong></a>.</p><noscript><figure class=„video video–fullwidth a-u-inline“><div class=„videoyt-container“><figcaption class=„a-caption“>DuckDB: Ente gut, alles gut?</figcaption></div></figure></noscript></div><p>DuckDB, und das ist ebenfalls eine Besonderheit, l&#228;uft dabei aber nicht nur In-Process mit der eigentlichen Anwendung, sondern sie kennt auch noch zwei Betriebsmodi: Sie kann die Daten n&#228;mlich entweder ganz klassisch auf Disk persistieren oder, und das ist ungew&#246;hnlich, sie kann komplett In-Memory ausgef&#252;hrt werden, also komplett ohne Persistenz. Das klingt vielleicht im ersten Augenblick etwas widersinnig, aber in einigen Szenarien ist das unglaublich praktisch und hilfreich. Und (das ist nat&#252;rlich auch noch ein ganz gravierender Punkt) im Fall dieses In-Memory-Betriebs ist DuckDB rasend schnell.</p><h3 class=„subheading“ id=„nav_fokus_auf_olap_1“>Fokus auf OLAP</h3><p>Und damit kommen wir nun zur eigentlichen Spezialit&#228;t von DuckDB, die sie auch als eingebettete In-Process-Datenbank von zum Beispiel SQLite abhebt: SQLite ist n&#228;mlich grunds&#228;tzlich eine SQL-basierte, relationale Datenbank, die Tabellen kennt, und in diesen Tabellen die Daten zeilenweise speichert. F&#252;r viele Anwendungsf&#228;lle ist das praktisch, denn h&#228;ufig werden Daten auch entsprechend Datensatz f&#252;r Datensatz gelesen und verarbeitet. Aber: Das muss nicht so sein.</p><p>Es gibt n&#228;mlich auch Anwendungsf&#228;lle, in denen es deutlich praktischer w&#228;re, wenn man effizient die Spalten statt der Zeilen lesen (beziehungsweise schreiben) k&#246;nnte. Das ist immer dann der Fall, wenn es um die Aggregation von Daten geht, also zum Beispiel bei Statistiken, Analysen, Reports und so weiter. Also im Prinzip bei allem, was eher in den Bereich <a href=„https://www.youtube.com/watch?v=mmPkqSR7eXE“ rel=„external noopener“ target=„_blank“><strong>OLAP statt OLTP [4]</strong></a> f&#228;llt.</p><p>Hier wird es spannend: DuckDB ist n&#228;mlich eine spaltenorientierte Datenbank, das hei&#223;t, sie ist nicht so sehr auf das tagt&#228;gliche operative Gesch&#228;ft ausgelegt, sondern sie adressiert den Datenanalyse-Bereich. Mit anderen Worten: Mit DuckDB hat man eine In-Process- und, wenn man das m&#246;chte, auch eine In-Memory-Engine, die sich mit SQL ansteuern l&#228;sst, und die auf Datenanalyse und OLAP ausgelegt ist. Also im Prinzip so etwas wie Apache Spark, nur halt in klein, schnuckelig, leichtgewichtig und gef&#252;hlt zigmal einfacher.</p><p>Und das ist tats&#228;chlich ein ziemliches Alleinstellungsmerkmal. So eine Datenbank gibt (oder besser gesagt: gab) es zumindest meines Wissens nach bisher noch nicht.</p><h3 class=„subheading“ id=„nav_integration_mit2“>Integration mit allem</h3><p>Vor einigen Tagen habe ich mich mit einem Freund unterhalten, der in ebendiesem Bereich t&#228;tig ist, und wir kamen durch Zufall auf Spark zu sprechen. Ich fragte, ob sie denn wirklich derart umfangreiche Datenmengen h&#228;tten, dass sich der Aufwand f&#252;r ein Spark-Cluster lohnen w&#252;rde. Und seine ganz klare Antwort war Nein, das lie&#223;e sich auch problemlos auf einem einzelnen Server komplett im RAM bewerkstelligen. Das bedeutet nat&#252;rlich nicht, dass es keinen Anwendungsfall f&#252;r Spark g&#228;be, aber allzu oft wird Spark mangels Alternativen auch ohne Notwendigkeit genutzt.</p><p>Viele denken nun vielleicht, dass sich das alles in der Theorie ganz nett anh&#246;rt, aber in der Realit&#228;t ging es um mehr, wie beispielsweise die Integration mit diversen anderen Datenquellen. Schlagw&#246;rter wie Apache Arrow, Parquet-Files, CSV, JSON, Excel und S3 stehen vielleicht im Raum. Das Sch&#246;ne ist: DuckDB kann das alles. DuckDB versteht Parquet-Dateien ebenso wie CSV, JSON und Excel. DuckDB kann sogar andere Datenbanken als Datenquelle integrieren. Das hei&#223;t, mit DuckDB l&#228;sst sich etwa direkt eine PostgreSQL oder eine MariaDB anbinden, ohne daf&#252;r einen gesonderten Adapter zu ben&#246;tigen.</p><h3 class=„subheading“ id=„nav_features_ohne3“>Features ohne Ende</h3><p>Die Liste der interessanten Features geht jedoch noch deutlich weiter: DuckDB unterst&#252;tzt wie gesagt SQL, und zwar nicht (wie so oft) nur eine Schmalspurvariante, sondern vollumf&#228;nglich nahezu alles, was SQL heutzutage zu bieten hat: von Indizes &#252;ber Transaktionen, Common Table Expressions, Snapshot-Isolation, CUBE-Funktionen, As-Of-Joins und vieles mehr. Als ich das alles nach und nach herausgefunden habe, war ich doch sehr beeindruckt.</p><p>Und weil DuckDB in C++ geschrieben ist, kann man die Datenbank zum einen auf so ziemlich jeder g&#228;ngigen Plattform (macOS, Linux, Windows) und Architektur (x86, ARM) nutzen. Zum anderen l&#228;sst sich DuckDB auch in nahezu jede beliebige andere Technologie integrieren. Es gibt von Haus aus schon eine ganze Reihe von Adaptern, unter anderem f&#252;r <a href=„https://duckdb.org/docs/api/overview“ rel=„external noopener“ target=„_blank“><strong>Go, Node.js, Python, R, Rust, Java, Julia, Swift und noch einige mehr [5]</strong></a>. Es gibt sogar einen <a href=„https://duckdb.org/docs/api/wasm/overview“ rel=„external noopener“ target=„_blank“><strong>WebAssembly-Build [6]</strong></a>, sodass man DuckDB komplett im Browser laufen lassen kann! Und das alles mit mehr oder weniger ein paar Zeilen Code, denn die Installation und auch die Anbindung sind wirklich simpel.</p><p>Apropos Installation: Wer einfach mal so ein bisschen mit DuckDB experimentieren und daf&#252;r nicht direkt eine Anwendung erstellen m&#246;chte, kann DuckDB auch <a href=„https://duckdb.org/docs/installation/index“ rel=„external noopener“ target=„_blank“><strong>&#252;ber die Paketverwaltung des jeweiligen Betriebssystems [7]</strong></a> installieren und als eigenst&#228;ndiges Werkzeug &#252;ber ein CLI starten. Gleichzeitig hei&#223;t das &#252;brigens auch, dass jede Anwendung nat&#252;rlich ihre eigene lokale Version von DuckDB haben kann, weil es keine systemweite Installation als Server gibt, die sich alle teilen m&#252;ssten. Im Prinzip ist das einfach nur eine ganz normale weitere Abh&#228;ngigkeit, die man zu der eigenen Codebase dazu installiert.</p><h3 class=„subheading“ id=„nav_was_bedeutet4“>Was bedeutet Version 1.0?</h3><p>Ich habe geschrieben, dass vergangene Woche die Version 1.0 erschienen ist. Diese tr&#228;gt den Codenamen „Snow Duck“. Tats&#228;chlich ist das eine Anspielung an macOS 10.6 „Snow Leopard“, was Apple damals mit dem Slogan „Zero Features“ beworben hat, weil Snow Leopard den Fokus ausschlie&#223;lich auf Stabilit&#228;t gelegt hat. Genau das ist laut den Entwicklerinnen und Entwicklern von DuckDB auch das <a href=„https://duckdb.org/2024/06/03/announcing-duckdb-100.html“ rel=„external noopener“ target=„_blank“><strong>Hauptziel der 1.0 [8]</strong></a> gewesen: Einen wirklich stabilen Unterbau zu liefern. Wer DuckDB schon ein bisschen l&#228;nger verfolgt, wei&#223;, dass es im Laufe der Zeit den einen oder anderen Breaking Change im Dateiformat gab. Aber auch das ist jetzt behoben und final festgelegt. Die Entwicklerinnen und Entwickler geben an, dass DuckDB 1.0 nun wirklich als stabile Version anzusehen sei.</p><p>Apropos Entwicklerinnen und Entwickler: Ich habe auch erw&#228;hnt, dass DuckDB urspr&#252;nglich ein Uniprojekt war. Die Entwicklung obliegt inzwischen aber einem Unternehmen, das sich daraus gebildet hat, n&#228;mlich <a href=„https://duckdblabs.com/“ rel=„external noopener“ target=„_blank“><strong>DuckDB Labs [9]</strong></a>. Dieses wiederum h&#228;ngt nicht von externen Investoren ab, sondern ist komplett selbst gebootstrappt. Das finde ich pers&#246;nlich immer ein sehr gutes Zeichen, weil das bedeutet, dass ein Unternehmen technologisch sinnvolle Entscheidungen treffen kann und nicht zahlengetrieben Irgendetwas machen muss, um Investoren zufriedenzustellen. Von daher gehe ich pers&#246;nlich davon aus, dass DuckDB eine gute Zukunft bevorsteht.</p><h3 class=„subheading“ id=„nav_eine_gl&#228;nzende5“>Eine gl&#228;nzende Zukunft</h3><p>Apropos Zukunft: Falls das alles an Argumenten noch nicht gen&#252;gt, um mal einen Blick auf DuckDB zu werfen, sei noch erw&#228;hnt, dass es auch eine ganze Reihe von Extensions gibt, mit denen man den Funktionsumfang erweitern kann &#8211; zum Beispiel f&#252;r eine Volltextsuche oder f&#252;r den Umgang mit Geo-Spatial-Daten.</p><p>Denjenigen, die neugierig geworden sind, kann ich abschlie&#223;end noch ein Buch empfehlen, das zwar noch nicht final erschienen ist (das wird voraussichtlich noch zwei Monate dauern), aber das man trotzdem vorab schon lesen kann, und zwar: „<a href=„https://www.manning.com/books/duckdb-in-action“ rel=„external noopener“ target=„_blank“><strong>DuckDB in Action [10]</strong></a>“ von Manning Publishing. Der Vorab-Zugriff ist &#252;ber deren MEAP-Programm (das „Manning Early Access Program“ m&#246;glich). Ich habe das, was von dem Buch bislang zur Verf&#252;gung steht (und das ist zugegebenerma&#223;en bereits fast alles), schon gelesen, und wie gesagt: Ich kann es w&#228;rmstens empfehlen! Mehr zu dem Buch finden Sie in der <a href=„https://www.heise.de/hintergrund/Buchbesprechung-DuckDB-in-Action-9736958.html“ rel=„external noopener“ target=„_blank“><strong>Buchbesprechung von Thorben Janssen [11]</strong></a>.</p><p>Am Ende stellt sich trotz allem nat&#252;rlich die Frage nach der passenden Anwendung. DuckDB ist auf Datenanalyse ausgelegt. Das hei&#223;t, wer eher eine klassische SQL-Datenbank sucht, wird mit DuckDB wahrscheinlich nicht &#252;berm&#228;&#223;ig gl&#252;cklich werden. F&#252;r diejenigen, die sich aber ohnehin mit OLAP &amp; Co. besch&#228;ftigen und f&#252;r die Spark &amp; Co. zu gro&#223; und zu komplex sind, ist DuckDB sicherlich mehr als nur einen Blick wert. () </p><hr /><p><strong>URL dieses Artikels:</strong><br /><small>

https://www.heise.de/-9753854

</small></p><p><strong>Links in diesem Artikel:</strong><br /><small>

<strong>[1]</strong>&#160;https://duckdb.org/

</small><br /><small>

<strong>[2]</strong>&#160;https://www.sqlite.org/

</small><br /><small>

<strong>[3]</strong>&#160;https://www.heise.de/Datenschutzerklaerung-der-Heise-Medien-GmbH-Co-KG-4860.html

</small><br /><small>

<strong>[4]</strong>&#160;https://www.youtube.com/watch?v=mmPkqSR7eXE

</small><br /><small>

<strong>[5]</strong>&#160;https://duckdb.org/docs/api/overview

</small><br /><small>

<strong>[6]</strong>&#160;https://duckdb.org/docs/api/wasm/overview

</small><br /><small>

<strong>[7]</strong>&#160;https://duckdb.org/docs/installation/index

</small><br /><small>

<strong>[8]</strong>&#160;https://duckdb.org/2024/06/03/announcing-duckdb-100.html

</small><br /><small>

<strong>[9]</strong>&#160;https://duckdblabs.com/

</small><br /><small>

<strong>[10]</strong>&#160;https://www.manning.com/books/duckdb-in-action

</small><br /><small>

<strong>[11]</strong>&#160;https://www.heise.de/hintergrund/Buchbesprechung-DuckDB-in-Action-9736958.html

</small><br /><small>

<strong>[12]</strong>&#160;mailto:rme@ix.de

</small><br /></p><p class=„printversion__copyright“><em>Copyright &#169; 2024 Heise Medien</em></p> </html>

Cookies helfen bei der Bereitstellung von Inhalten. Diese Website verwendet Cookies. Mit der Nutzung der Website erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Computer gespeichert werden. Außerdem bestätigen Sie, dass Sie unsere Datenschutzerklärung gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information