Entwicklung & Code
Event Sourcing trifft MCP: Die ganze Geschichte für LLMs
Im vergangenen August habe ich an dieser Stelle argumentiert, dass Event Sourcing die perfekte Grundlage für KI sei. Die Kernthese lautete: Ohne vollständige, kontextreiche Daten bleibt jedes noch so leistungsfähige Modell blind. Event Sourcing liefert genau diese Daten, weil es nicht nur den aktuellen Zustand speichert, sondern die gesamte fachliche Geschichte. An der These hat sich nichts geändert. Doch eine Frage blieb damals offen: Wie macht man diese Daten für ein Large Language Model zugänglich?
Weiterlesen nach der Anzeige

Golo Roden ist Gründer und CTO von the native web GmbH. Er beschäftigt sich mit der Konzeption und Entwicklung von Web- und Cloud-Anwendungen sowie -APIs, mit einem Schwerpunkt auf Event-getriebenen und Service-basierten verteilten Architekturen. Sein Leitsatz lautet, dass Softwareentwicklung kein Selbstzweck ist, sondern immer einer zugrundeliegenden Fachlichkeit folgen muss.
Seit knapp anderthalb Jahren existiert mit dem Model Context Protocol (MCP) ein offener Standard, der LLMs mit beliebigen externen Datenquellen verbindet. Damit lässt sich die Lücke zwischen dem, was ein Event-Store an Daten bereithält, und dem, was ein Sprachmodell davon sehen kann, elegant schließen. Dieses Zusammenspiel verdient einen genaueren Blick.
Warum Kontext für LLMs alles entscheidet
Wer mit Large Language Models arbeitet, lernt schnell eine wichtige Lektion: Die Qualität der Antworten hängt weniger vom Modell ab als vom Kontext, den man ihm gibt. Ein durchschnittliches Modell mit hervorragendem Kontext liefert bessere Ergebnisse als ein Spitzenmodell, dem der Kontext fehlt. Das gilt für einfache Prompts ebenso wie für komplexe Analysen über Unternehmensdaten.
Kontext bedeutet hier nicht nur die Frage, die man stellt, sondern vor allem auch die Daten, auf die das Modell zugreifen kann. Und genau hier liegt das Problem: Die meisten Datenbanken speichern ausschließlich den aktuellen Zustand. Eine relationale Datenbank verrät Ihnen, dass eine Kundin den Status „Premium“ hat. Sie verrät aber nicht, seit wann, warum oder welche Interaktionen dazu geführt haben. Sie zeigt, dass ein Produkt 9,99 Euro kostet, nicht jedoch, ob dieser Preis gestern gesenkt wurde oder seit zehn Jahren unverändert ist. Sie zeigt, dass eine Bestellung den Status „offen“ hat, nicht jedoch, ob sie dreimal geändert, einmal storniert und dann erneut aufgegeben wurde.
Für ein LLM ist das, als würde man ihm ein Buch reichen, in dem nur das letzte Kapitel steht. Es kann den aktuellen Zustand beschreiben, aber keine Zusammenhänge erklären, keine Muster erkennen, keine Entwicklungen nachvollziehen. Es fehlt schlicht die Geschichte, die in den vorangegangenen Kapiteln erzählt wurde.
Event Sourcing löst dieses Problem grundlegend. Statt den Zustand zu speichern und bei jeder Änderung zu überschreiben, werden die einzelnen Zustandsänderungen als fachliche Ereignisse festgehalten. Jedes Ereignis beschreibt, was passiert ist, wann es passiert ist und in welchem fachlichen Kontext es steht. Die Summe aller Ereignisse ergibt nicht nur den aktuellen Zustand, sondern die vollständige, chronologische und unveränderliche Geschichte. Aus dem letzten Kapitel wird das gesamte Buch.
Weiterlesen nach der Anzeige
MCP als universelle Brücke
Die beste Datengrundlage nützt allerdings wenig, wenn ein LLM nicht darauf zugreifen kann. Bislang erforderte die Anbindung externer Datenquellen an ein Sprachmodell in der Regel individuelle Integrationen: eigene APIs, eigenen Glue-Code, eigene Wartung. Für jede Kombination aus Datenquelle und LLM musste eine eigene Lösung gebaut werden. Das skaliert schlecht und schafft Abhängigkeiten, die sich im Laufe der Zeit zu einer ernsthaften technischen Schuld entwickeln.
Das Model Context Protocol ändert das: MCP ist ein offener Standard, den Anthropic im November 2024 vorgestellt hat und der inzwischen breite Unterstützung durch zahlreiche Anbieter genießt. Auch OpenAI, Google und andere große Anbieter haben sich dem Standard angeschlossen. MCP definiert eine einheitliche Schnittstelle zwischen LLMs und externen Datenquellen. Ein MCP-Server stellt Werkzeuge und Daten bereit, die ein LLM über einen MCP-Client nutzen kann. Die Interaktion erfolgt in natürlicher Sprache: Das Modell formuliert Anfragen, der Server liefert die passenden Daten. Das Ganze geschieht über ein standardisiertes Protokoll auf Basis von JSON-RPC, sodass weder auf Client- noch auf Server-Seite proprietäre Technik erforderlich ist.
Das Entscheidende an MCP ist seine Datenquellenagnostik. Der Standard definiert, wie die Kommunikation abläuft, nicht jedoch, welche Art von Daten dahintersteckt. Ob ein MCP-Server eine relationale Datenbank, ein Dateisystem, eine API oder einen Event-Store anbindet, spielt auf Protokollebene keine Rolle. Inzwischen existieren MCP-Server für Dutzende von Systemen: von GitHub über Slack bis hin zu Datenbanken verschiedenster Art.
Die Frage, die MCP nicht beantwortet, ist deshalb umso wichtiger: Welche Qualität haben die Daten, die über diesen Kanal fließen? Wenn MCP die Brücke zwischen LLM und Datenquelle ist, dann entscheidet die Datenquelle darüber, wie tragfähig diese Brücke sein kann. Eine über MCP angebundene CRUD-Datenbank liefert weiterhin nur Snapshots. Ein Event-Store hingegen liefert die ganze Geschichte.
Was ein LLM in einer Bibliothek sehen kann
Um das greifbar zu machen, hilft ein konkretes, von mir regelmäßig genutztes Beispiel, das eine öffentliche Bibliothek als Domäne modelliert. Die zugehörigen Events sind überschaubar und dennoch fachlich reichhaltig: Ein BookAcquired-Event beschreibt die Anschaffung eines neuen Buches mit Titel, Autorin oder Autor und ISBN. BookBorrowed dokumentiert die Ausleihe, BookReturned die Rückgabe. Auf der Seite der Leserinnen und Leser gibt es ReaderApplied für die Anmeldung und ReaderAccepted für die Freischaltung des Bibliotheksausweises. Geht es an die konkrete Implementierung, greife ich auf den CloudEvents-Standard zurück, der ein fachlich benanntes Typenfeld und eine umgekehrte Domain-Schreibweise wie io.eventsourcingdb.library.book-borrowed vorsieht. Jedes Buch und jede Leserin beziehungsweise jeder Leser bildet dabei ein eigenes Subject, also einen eigenen Event-Stream, der die jeweilige Geschichte vollständig abbildet.
Stellen Sie sich nun vor, ein LLM hätte über einen MCP-Server Zugriff auf den Event-Store dieser Stadtbibliothek. Es könnte die vorhandenen Subjects durchsuchen, also die einzelnen Bücher sowie Leserinnen und Leser identifizieren. Es könnte die Event-Typen auflisten und so die Struktur der Domäne verstehen, ohne dass jemand sie erklären müsste. Und es könnte gezielt Fragen beantworten, die mit einer CRUD-Datenbank schwer oder gar nicht zu beantworten wären.
„Welche Bücher wurden in den letzten zwölf Monaten angeschafft, aber noch nie ausgeliehen?“
Diese Frage erfordert die Kenntnis, dass ein Buch existiert (BookAcquired), und die Abwesenheit eines bestimmten Folgeereignisses (BookBorrowed). In einer CRUD-Datenbank müsste dafür ein eigens gepflegtes Feld existieren, das bei jeder Änderung korrekt aktualisiert wird. Im Event-Store ergibt sich die Antwort direkt aus der Ereignisfolge.
„Zeige mir die vollständige Ausleihhistorie von Leserin 23.“
In einer CRUD-Datenbank sehen Sie bestenfalls, welches Buch die Leserin gerade ausgeliehen hat. Im Event-Store sehen Sie jede einzelne Ausleihe, jede Rückgabe, jede verspätete Rückgabe und jede erhobene Gebühr. Das LLM kann daraus Muster ableiten, etwa ob bestimmte Genres bevorzugt werden oder ob Rückgaben regelmäßig verspätet erfolgen.
„Welche Bücher werden häufig ausgeliehen, aber selten rechtzeitig zurückgebracht?“
Auch das ist eine Frage, die erst durch die Kombination mehrerer Ereignisse über die Zeit beantwortbar wird. Ein LLM, das diese Daten sieht, kann nicht nur die Antwort liefern, sondern auch Hypothesen formulieren: Liegt es an der Länge des Buches? An der Beliebtheit? An konkreten Leserinnen und Lesern, die generell verspätet zurückgeben?
Entscheidend ist: Keine dieser Fragen erfordert, dass jemand vorab ein spezielles Lesemodell gebaut oder eine Auswertung programmiert hat. Das LLM formuliert die Frage, der MCP-Server liefert die Daten, und das Modell interpretiert sie. Die Flexibilität entsteht dadurch, dass die Rohdaten fachlich und historisch vollständig sind. Was in diesem Beispiel mit einer Stadtbibliothek funktioniert, funktioniert in der Realität mit jeder Domäne: Versicherungsschäden, Logistikketten, Bestellprozesse im E-Commerce, Behandlungsverläufe im Gesundheitswesen, …: Die Liste ist endlos. Und je reichhaltiger die Events aus semantischer Sicht sind, desto mehr kann ein LLM damit anfangen.
Warum Events die natürliche Sprache für LLMs sind
Es gibt einen weiteren Grund, warum Event Sourcing und LLMs so gut zusammenpassen, und er liegt in der Form der Daten selbst. Events sind von Natur aus in fachlicher Sprache formuliert. Ein Event-Typ wie io.eventsourcingdb.library.book-borrowed sagt bereits, was passiert ist. Die Daten des Events enthalten die Details: welches Buch, welche Leserin oder welcher Leser, zu welchem Zeitpunkt. Ein LLM muss bei solchen Daten nicht raten, was gemeint ist. Es liest keine kryptischen Statuscodes, keine technischen Fremdschlüssel, keine Spalte type mit dem Wert 3. Es liest genau das, was passiert ist: Ein Buch wurde ausgeliehen, ein Buch wurde zurückgegeben, eine Gebühr wurde erhoben, eine Leserin wurde gesperrt. Die Semantik steckt in den Daten selbst.
Hinzu kommt die chronologische Ordnung. Events sind naturgemäß zeitlich sortiert. Ein LLM kann die Events daher lesen wie eine Erzählung: Erst wurde das Buch angeschafft, dann ausgeliehen, dann zurückgegeben, dann erneut ausgeliehen, dann verspätet zurückgegeben, dann eine Gebühr erhoben. Diese narrative Struktur entspricht genau dem, womit Sprachmodelle am besten umgehen können. Sie sind darauf trainiert, Zusammenhänge in sequenziellen Daten zu erkennen, Muster zu identifizieren und Schlussfolgerungen zu ziehen. Eine Folge von Events ist strukturell näher an einem Text als an einer relationalen Tabelle.
Schließlich ist jedes Event in sich abgeschlossen und kontextreich. Es beschreibt nicht nur, was sich geändert hat, sondern trägt den fachlichen Zusammenhang bereits in sich. Ein BookBorrowed-Event enthält nicht nur eine Buch-ID und eine Leser-ID, sondern steht im Kontext eines Subject, das die gesamte Geschichte dieses Buches repräsentiert. Dieser eingebaute Kontext reduziert die Notwendigkeit, dem LLM zusätzliche Erklärungen mitzugeben. Die Events sprechen für sich.
Wer die aktuelle Entwicklung beim Context Engineering verfolgt, erkennt die Parallele: Es geht darum, einem Sprachmodell möglichst reichhaltigen, strukturierten und relevanten Kontext zur Verfügung zu stellen. Events erfüllen alle drei Kriterien, ohne dass eine zusätzliche Aufbereitung nötig wäre. Sie sind gewissermaßen bereits in der Sprache geschrieben, die LLMs am besten verstehen. Mit anderen Worten: Wenn Ihre Software bereits gute Daten liefert, wird die Auswertung per künstlicher Intelligenz bedeutend vereinfacht.
Von der Idee zur Praxis
Die Verbindung von Event Sourcing und MCP ist keine bloße Theorie. Mitte März 2026 wurde beispielsweise für die Datenbank EventSourcingDB ein MCP-Server als kostenfreie Erweiterung veröffentlicht. Er ermöglicht es, über ein beliebiges LLM in natürlicher Sprache mit dem Event-Store zu interagieren: Events lesen und schreiben, Subjects und Event-Types durchsuchen, Event-Schemas registrieren, EventQL-Queries ausführen und sogar die eingebaute EventQL-Dokumentation abfragen. Der MCP-Server läuft dabei als eigenständiger Prozess neben der Datenbank, unterstützt TLS-Verschlüsselung und Token-basierte Authentifizierung und ist als Docker-Image verfügbar.
Praktisch bedeutet das: Eine Entwicklerin kann ihrem LLM die Frage stellen, welche Subjects im Event-Store existieren, und erhält eine strukturierte Antwort. Sie kann fragen, welche Ereignisse für ein bestimmtes Buch vorliegen, und das LLM liest sie chronologisch aus dem Store. Sie kann eine analytische Frage formulieren, und das LLM übersetzt sie in eine EventQL-Query, führt sie aus und interpretiert das Ergebnis. All das geschieht über eine standardisierte Schnittstelle, ohne eine einzige Zeile Integrationscode. Was bisher erfahrene Entwicklerinnen und Entwickler mit Kenntnissen der Query-Sprache und der Datenstruktur erforderte, wird durch natürliche Sprache für ein breiteres Publikum zugänglich.
Es wäre jedoch falsch, diesen Gedanken auf ein einzelnes Produkt zu verengen. Das Prinzip gilt für jeden Event-Store, der einen MCP-Server anbietet oder künftig anbieten wird. Der Wert liegt nicht in der spezifischen Implementierung, sondern in der Kombination: ein Event-Store, der die vollständige fachliche Geschichte bereithält, und ein standardisiertes Protokoll, das diese Geschichte für Sprachmodelle zugänglich macht. EventSourcingDB ist lediglich ein konkretes Beispiel dafür, wie diese Kombination heute in der Praxis aussehen kann.
Nicht die Technik entscheidet, sondern die Daten dahinter
MCP löst also ein reales Problem: Es standardisiert den Zugang von LLMs zu externen Datenquellen und macht individuelle Integrationen überflüssig. Das ist ein bedeutender Schritt. Doch MCP allein reicht nicht. Ein standardisierter Zugang zu unzureichenden Daten liefert standardisiert unzureichende Ergebnisse.
Die eigentliche Frage bleibt bestehen: Welche Daten stecken hinter dem MCP-Server? Wer eine CRUD-Datenbank anbindet, gibt einem LLM Zugriff auf den aktuellen Zustand. Das ist besser als gar kein Zugriff, bleibt aber bei Snapshots ohne Geschichte. Das LLM sieht, was ist. Es sieht nicht, was war, was sich verändert hat oder warum.
Wer hingegen einen Event-Store anbindet, gibt einem LLM Zugriff auf die gesamte fachliche Historie. Es sieht nicht nur den Zustand, sondern den Weg dorthin. Es kann Muster erkennen, Zusammenhänge herstellen und Entwicklungen nachvollziehen. Es kann erklären, nicht nur beschreiben.
Die Kombination aus Event Sourcing und MCP ist deshalb so wirkungsvoll, weil sie zwei komplementäre Probleme gleichzeitig behebt. Event Sourcing löst das Datenproblem: Es liefert vollständige, kontextreiche und fachlich formulierte Daten. MCP löst das Zugangsproblem: Es macht diese Daten über eine standardisierte Schnittstelle für Sprachmodelle erreichbar. Keines der beiden löst für sich allein die gesamte Herausforderung. Zusammen jedoch schließen sie eine Lücke, die bislang dafür sorgte, dass LLMs entweder keinen Zugang zu den richtigen Daten hatten oder Zugang zu den falschen.
Dabei ist bemerkenswert, wie stabil diese Kombination gegenüber Veränderungen ist. Die Modelle werden sich weiterentwickeln, neue LLMs werden erscheinen, bestehende werden leistungsfähiger. Die Art, wie wir Prompts formulieren, wird sich ändern. Auch MCP wird sich als Protokoll weiterentwickeln. Was sich nicht ändern wird, sind die gespeicherten Ereignisse. Sie bleiben das unveränderliche Fundament, auf dem alles andere aufbaut. Wer heute damit beginnt, Events zu speichern, investiert nicht in eine kurzlebige Technologie, sondern in Daten, die mit jedem neuen Modell und jedem zukünftigen Zugangsweg an Wert gewinnen.
Wer im vergangenen August meinen eingangs erwähnten Artikel über Event Sourcing als Grundlage für KI gelesen hat, findet hier den nächsten logischen Schritt. Die Daten sind da. Jetzt sind sie auch zugänglich.
(rme)
Entwicklung & Code
Android 17: „Continue on“-Funktion bringt nahtlose App-Übergabe zwischen Geräten
Google hat seine „Continue On“-Funktion im Rahmen der I/O-Session „What’s new in Android“ angekündigt und sie auf der Entwicklerseite näher erläutert. Sie ist Teil von Android 17 und soll Nutzerinnen und Nutzer ermöglichen, eine App auf einem Android-Gerät zu starten und dann auf ein anderes Gerät in ihrem Android-Ökosystem zu wechseln, um die begonnene Aufgabe fortzusetzen.
Weiterlesen nach der Anzeige
Continue-on: Handoff für Android
Wie der Entwickler auf seiner Developer-Webseite erläutert, ist „Continue On“ für den bidirektionalen Einsatz konzipiert. Das heißt, dass jedes unterstützte Android-Gerät sowohl App-Aktivitäten senden als auch empfangen kann, dabei müssen die Geräte jeweils mit dem gleichen Google-Konto verknüpft sein.
Mit dem Release von Android 17, der im Laufe der kommenden Wochen erwartet wird, soll „Continue On“ zunächst den Übergang von Smartphones zu Tablets unterstützen. Dabei werde in der Taskleiste des Tablets ein Vorschlag für die zuletzt auf dem Smartphone geöffnete App angezeigt. Über diesen können Nutzer die App mit einem Fingertipp starten und dort weitermachen, wo er oder sie aufgehört habe.

Continue-on-Funktion: App-Übergabe zwischen Smartphone und Tablet.
(Bild: Google)
Als Beispiel nennt Google etwa die Möglichkeit, dasselbe Dokument in Google Docs, das man zuerst auf dem Smartphone genutzt hat, auf dem Tablet zu öffnen und daran weiterzuarbeiten. Ein weiteres Beispiel zeigt, dass die Übergabe auch mit einem Webbrowser funktioniert: Eine E-Mail in Gmail wird an Chrome auf einem Tablet weitergeleitet, wo sie direkt geöffnet wird.

Continue-on von Gmail-App auf dem Smartphone in den Chrome-Browser auf dem Tablet.
(Bild: Google)
Trotz der anfänglichen Einschränkungen ähnelt der Ansatz stark Apples „Handoff“-Funktion, mit der iPhone-Nutzer Aufgaben nahtlos auf das iPad oder den Mac übertragen können. Apple hatte dieses Feature schon 2014, also vor über 10 Jahren, eingeführt. Im Hinblick auf Googles baldigen Marktstart der im Zuge der Android Show: I/O Edition angekündigten Googlebooks auf Android-Basis, dürfte die Funktion auch auf dieser neuen Gerätegattung landen, um das Ökosystem zu stärken.
Weiterlesen nach der Anzeige
Entwickler müssen handeln
Erste Informationen zur Handoff-Funktion veröffentlichte Google schon im Februar dieses Jahres in der Dokumentation zu Android 17 im Punkt „Funktionen und APIs“.
Damals erklärte Google, dass die Handoff-Funktion im Hintergrund auf dem Gerät eines Nutzers ausgeführt wird. Das Unternehmen schreibt in der Dokumentation: „Die Handoff-Unterstützung wird auf Basis einzelner Aktivitäten implementiert.“ Um Handoff zu aktivieren, müssen Entwickler die Methode setHandoffEnabled() für die Aktivität aufrufen. „Möglicherweise müssen zusätzliche Daten zusammen mit der Übergabe übermittelt werden, damit die neu erstellte Aktivität auf dem empfangenden Gerät den entsprechenden Status wiederherstellen kann. Implementieren Sie den Rückruf onHandoffActivityRequested(), um ein HandoffActivityData-Objekt zurückzugeben, das Details enthält, die angeben, wie Handoff die Aktivität auf dem empfangenden Gerät verarbeiten und neu erstellen soll.“
Lesen Sie auch
(afl)
Entwicklung & Code
Mitschöpfer von DuckDB: „Es war klar, dass eine neue Architektur notwendig ist“

Hannes Mühleisen
(Bild: Hannes Mühleisen)
Hannes Mühleisen ist Mitschöpfer von DuckDB und CEO von DuckDB Labs. Zusammen mit Mark Raasveldt hat er DuckDB ursprünglich als Forschungssprojekt am Centrum Wiskunde & Informatica (CWI) Amsterdam ins Leben gerufen.
Weiterlesen nach der Anzeige

Golo Roden ist Gründer und CTO von the native web GmbH. Er beschäftigt sich mit der Konzeption und Entwicklung von Web- und Cloud-Anwendungen sowie -APIs, mit einem Schwerpunkt auf Event-getriebenen und Service-basierten verteilten Architekturen. Sein Leitsatz lautet, dass Softwareentwicklung kein Selbstzweck ist, sondern immer einer zugrundeliegenden Fachlichkeit folgen muss.
Golo: Hannes, du bist einer der Mitschöpfer von DuckDB und Mitgründer von DuckDB Labs. Als DuckDB im Sommer 2024 in Version 1.0 erschienen ist, habe ich für heise darüber berichtet – und seitdem ist viel passiert. Bevor wir in die Details gehen, würde ich gerne ganz am Anfang beginnen: DuckDB hat seine Wurzeln in eurer Forschung am CWI in Amsterdam, wo du und Mark Raasveldt jahrelang an Datenbank-Internas gearbeitet habt. Was war der Moment (oder die Lücke), an dem ihr beide entschieden habt, dass die Welt tatsächlich noch eine weitere Datenbank benötigt, und was sollte sie ursprünglich sein?
Hannes: Wir haben damals recht eng mit Statistikern zusammengearbeitet, die große Umfragedaten auswerten mussten. Für uns war klar, die brauchen Datenbank-Technologie! Aber als wir das vorgeschlagen haben, haben die gesagt, dass sie eigentlich keine Lust auf eine Datenbank im klassischen Sinne haben. Es war zum Beispiel vor Docker nicht einfach, eine Datenbank lokal zu installieren, ohne Experte zu sein. Außerdem konnte man den Zustand der Datenbank auch nicht ohne weiteres mit jemand anderem teilen.
Es war klar, dass eine neue Architektur notwendig ist, ein eingebettetes analytisches Datenbanksystem. Das gab es damals noch gar nicht. Es war recht schnell klar, dass wir eine komplette Neuentwicklung brauchten – ein sauberes Design, das auf das eingebettete Einsatzmodell zugeschnitten war, mit einer modernen Systemarchitektur.
Im Sommer 2018 beschlossen wir, dies in die Tat umzusetzen, und begannen mit der Implementierung von DuckDB.
Der Begriff „SQLite for Analytics“ haftet DuckDB schon seit Jahren an. Er bringt vieles in nur drei Worten auf den Punkt, kann aber auch reduzierend wirken. Wie treffend findest du dieses Framing aus deiner heutigen Sicht, und wo greift es zu kurz?
Weiterlesen nach der Anzeige
Hannes: „SQLite für Analytics“ war in den ersten fünf Jahren eine treffende Beschreibung des Projekts. Im Laufe der Zeit haben wir einen leistungsfähigen Erweiterungsmechanismus hinzugefügt, der die Arbeit mit nahezu jedem Dateiformat wie Parquet, JSON oder Iceberg und vielen gängigen Speicheroptionen, zum Beispiel S3-API, ermöglicht. Deshalb haben wir begonnen, DuckDB als universelles Datenwerkzeug zu bezeichnen.
Das ist vielleicht weniger einprägsam als die ursprüngliche Beschreibung, erfasst aber, dass das System inzwischen wesentlich vielseitiger ist. Und wenn man ein SQLite für Analytics braucht, kann man DuckDB nach wie vor dafür verwenden.
Jenseits von Big Data
Du vertrittst seit einiger Zeit die Position, dass verteilte Systeme für die allermeisten analytischen Workloads schlicht überdimensioniert sind – und dass eine einzelne moderne Maschine deutlich mehr leisten kann, als die Branche meist annimmt. Das ist ein Argument, das ich auch in einem ausführlichen iX-Test aufgegriffen habe, in dem ich DuckDB als schlanke Alternative zu Apache Spark positioniert habe. Magst du diese These in deinen eigenen Worten machen? Und wie reagierst du auf Leute, die dich daraufhin sofort dafür kritisieren, ihr Problem zu unterschätzen?
Hannes: Mein Argument stützt sich auf drei Säulen. Erstens: Die Hardwareentwicklung hat große Fortschritte gemacht, und moderne Computer sind erstaunlich leistungsfähig. Heute wird ein leistungsstarker Laptop mit einem Dutzend schneller CPU-Kerne, mehreren zehn Gigabyte Arbeitsspeicher und einer schnellen SSD mit Terabytes an Speicherplatz ausgeliefert. Ein Server kann leicht das Zehnfache und mehr bieten.
Zweitens: Das Feld der Datenbankarchitektur hat sich seit 2010 – als Big Data aufkam – erheblich weiterentwickelt. Wir konnten auf Ergebnisse zu spaltenbasierter Speicherung, vektorisierter Abfrageverarbeitung, Parallelität und Nebenläufigkeitskontrolle aufbauen. Darüber hinaus haben wir eigene Forschung zu Themen wie Kompression und Operatoren für Datenmengen, die den Arbeitsspeicher übersteigen, betrieben.
Drittens: Was die meisten nicht bedenken – auch wenn eine Organisation auf Petabytes an Daten sitzt, muss man nie alle Daten in einer einzigen Abfrage verarbeiten. Dafür gibt es inzwischen belastbare Belege: In den letzten Jahren haben sowohl Snowflake als auch Redshift Stichproben und Statistiken ihrer Benutzerabfragen veröffentlicht – wahre Fundgruben, um reale Workloads zu verstehen. George Fraser von Fivetran hat eine hervorragende Analyse dazu vorgestellt, in der er zeigt, dass selbst unter den Abfragen auf Snowflake und Redshift das 99,9-Perzentil etwa 300 GB scannt und somit problemlos auf einem einzelnen Knoten laufen könnte.
Performance ist einer der auffälligsten Aspekte von DuckDB – viele Erstanwender beschreiben ihre erste Erfahrung mit den Worten „das kann nicht stimmen, lass mich das Ergebnis nochmal prüfen“. Welche architektonischen Entscheidungen sind dafür aus deiner Sicht am wichtigsten, und welche davon sind für Außenstehende nicht offensichtlich?
Hannes: Wir haben bereits über die Entscheidung für eine Einzelknoten-Architektur gesprochen, die verschiedene Arten von Overhead in Implementierung, Betrieb und Leistung eliminiert. Aber es gibt auch einige nicht triviale architektonische Entscheidungen.
Wir haben uns für vektorisierte Ausführung statt JIT-Kompilierung entschieden, weil sie perfekt für analytische Workloads und langfristig deutlich einfacher zu warten ist. Wir haben keine GPUs oder exotische Hardware wie KI-Beschleuniger eingesetzt, sondern all unsere Energie darauf verwendet, die effizientesten Algorithmen für die CPU zu schreiben. Und schließlich haben wir bei der Implementierung dieser Algorithmen bewusst auf SIMD-Intrinsics (manuell ausformulierte Vektorbefehle) verzichtet. Stattdessen haben wir skalaren Code geschrieben und den Compiler die Auto-Vektorisierung übernehmen lassen. Das Ergebnis ist hoch portabler und zugleich leistungsfähiger Code.
Darüber hinaus – wie in der vorherigen Frage besprochen – sind viele aktuelle Forschungsergebnisse in DuckDB eingeflossen. Die Verarbeitung von Datenmengen, die den Arbeitsspeicher übersteigen, durch Auslagerung auf die Festplatte trägt maßgeblich zur Leistung von DuckDB bei. Die meisten modernen Datenbanksysteme können auf die Festplatte auslagern, aber wenn sie es tun, erleben sie einen Performance-Absturz. DuckDB nutzt moderne Flash-basierte Speicher, um dies wesentlich eleganter zu handhaben – oft bemerken die Benutzer kaum, dass ihre Abfragen auf die Festplatte ausgelagert wurden.
Das Ökosystem
Die Reichweite von DuckDB in die Python- und R-Communities, in Node.js, in alle möglichen Tools und Notebooks ist bemerkenswert. War diese Ökosystem-Strategie von Anfang an bewusst gewählt, oder ist sie entstanden, weil die Leute DuckDB in ihre Workflows hineingezogen haben?
Hannes: Man muss die Anwender natürlich da abholen, wo sie sind. Am Anfang stellten wir uns vor, dass DuckDB für Data-Science-Workloads genutzt werden würde, und das bestimmte die erste Auswahl an Clients. Wir brauchten natürlich einen Kommandozeilen-Client. Auf der Sprachseite war Python bereits sehr stark, und wir hatten enge Verbindungen zur R-Community, also entschieden wir uns, diese Clients zuerst zu implementieren.
Node.js folgte bald darauf. Als DuckDB wuchs, begann die Community eigenständig Clients zu entwickeln. Das ermöglichte es uns, deren Akzeptanz zu beobachten, bevor wir die Arbeit des Kernteams in fünfzehn verschiedene Treiber investierten. Zum Beispiel wurde der DuckDB-Go-Treiber zunächst von Marc Boeker implementiert, der den Code später an die DuckDB Foundation übergab.
Der Extension-Mechanismus wirkt wie eine eher leise, aber sehr folgenreiche Designentscheidung. Er erlaubt DuckDB, Formate zu lesen, für die es nicht gebaut wurde, mit Object Stores zu arbeiten und sogar mit anderen Datenbanken zu sprechen. Wie denkst du über die Grenze zwischen dem, was in den Kern gehört, und dem, was in einer Extension besser aufgehoben ist?
Hannes: Wir sehen, dass DuckDB in ressourcenbeschränkten Umgebungen eingesetzt wird – Einplatinencomputer, Browser-Tabs, Container mit begrenztem Arbeitsspeicher. Um diesen Einsatz zu ermöglichen, wollen wir den Kern von DuckDB kleinhalten und nur das Wesentliche einbauen: den SQL-Parser, die Datenbank-Engine, die Speicher-Engine, den CSV-Reader – und den Erweiterungsmechanismus. Die meisten anderen Funktionen wie der Parquet-Reader oder sogar HTTPS-Unterstützung stehen als Erweiterungen zur Verfügung.
Ein schöner Nebeneffekt dieses leistungsfähigen Erweiterungsmechanismus ist, dass unsere Community eigene Erweiterungen bauen kann. Derzeit gibt es mehr als 180 Community-Erweiterungen für DuckDB, die jeweils neue Funktionen ins System bringen und sich mit einer einzigen Zeile installieren lassen.
Entwicklung & Code
CMS Drupal: Hochkritisches Drupal-Core-Update für den 20. Mai angekündigt
Die Maintainer des quelloffenen Content-Management-Systems Drupal haben angekündigt, am Abend des Mittwochs, 20. Mai 2026, ein hochkritisches Sicherheitsupdate für Drupal Core veröffentlichen zu wollen. IT-Verantwortliche sollten es zeitnah installieren.
Weiterlesen nach der Anzeige
In der Vorankündigung des Sicherheitspatches schreibt das Drupal-Sicherheitsteam, dass die Aktualisierung zwischen 19 und 23 Uhr hiesiger Zeit erscheinen soll (17:00-21:00h UTC). Die Entwickler weisen darauf hin, dass Admins sich dringend die Zeit für das Anwenden des Drupal-Core-Updates nehmen sollten, da Exploits innerhalb von Stunden oder Tagen nach der Veröffentlichung des Fixes entwickelt werden könnten.
Immerhin, es sollen nicht alle Drupal-Konfigurationen gleichermaßen betroffen sein. Zu den Einschränkungen schreiben die Programmierer noch nichts, jedoch sollen Admins zum Zeitpunkt der Veröffentlichung prüfen, ob ihre Instanzen betroffen sind und ein sofortiges Update benötigen.
Updates nur für unterstützte Versionen
Die Aktualisierungen soll es eigentlich nur für die noch unterstützten Drupal-Core-Versionen 11.3.x, 11.2.x, 10.6.x und 10.5.x geben. Als Ausnahme kommen nun jedoch auch Patches für Drupal Core 11.1.x und 10.4.x hinzu, obwohl die bereits am Ende des Produkt-Supportzyklus angelangt sind. Als Begründung nennen die Entwickler den Schweregrad des Problems. Selbst für Drupal Core 9.5 und 8.9 legt das Sicherheitsteam korrigierte Software bereit.
Damit sich die Updates anwenden lassen, sollen Installationen mit Drupal Core 11.1 und 11.0 auf den Stand 11.1.9 aktualisiert werden, die Entwicklungszweige 10.4, 10.3, 10.2, 10.1 und 10.0 hingegen benötigen zuvor den Stand 10.4.9. Für die noch älteren Fassungen sind Drupal Core 9.5.11 und 8.9.20 Voraussetzung. Wer noch Drupal Core 7 einsetzt, ist von dem konkreten Problem nicht betroffen.
Am heutigen Abend soll die Verfügbarkeit des Sicherheitsupdates dann auf der Sicherheitsseite von Drupal sowie in den sozialen Medien angekündigt werden. Drupal-Core-Admins sollten in dem Zeitraum regelmäßig prüfen, ob das Update verfügbar ist, und es umgehend anwenden.
Weiterlesen nach der Anzeige
(dmk)
-
Social Mediavor 3 MonatenCommunity Management und Zielgruppen-Analyse: Die besten Insights aus Blog und Podcast
-
Entwicklung & Codevor 2 MonatenCommunity-Protest erfolgreich: Galera bleibt Open Source in MariaDB
-
Künstliche Intelligenzvor 2 MonatenBlade‑Battery 2.0 und Flash-Charger: BYD beschleunigt Laden weiter
-
Künstliche Intelligenzvor 2 Monaten
Top 10: Der beste Luftgütesensor im Test – CO₂, Schadstoffe & Schimmel im Blick
-
Apps & Mobile Entwicklungvor 2 MonatenMähroboter ohne Begrenzungsdraht für Gärten mit bis zu 300 m²
-
Künstliche Intelligenzvor 2 MonateniPhone Fold Leak: Apple spart sich wohl iPad‑Multitasking
-
Social Mediavor 2 MonatenVon Kennzeichnung bis Plattformpflichten: Was die EU-Regeln für Influencer Marketing bedeuten – Katy Link im AllSocial Interview
-
Künstliche Intelligenzvor 2 Monaten
JBL Bar 1300MK2 im Test: Soundbar mit Dolby Atmos, starkem Bass und Akku‑Rears
