Postgres wurde in Rust neu geschrieben… und hat irgendwie jeden Test bestanden

BBetter Stack
Computing/SoftwareSmall Business/StartupsInternet Technology

Transcript

00:00:00Jemand hat Postgres in Rust neu geschrieben, und irgendwie besteht die veröffentlichte Version jetzt alle 46.000 Postgres-Regressionstests.
00:00:08Es funktioniert mit normalem PSQL. Es kann sogar ein bestehendes Postgres 18.3-Datenverzeichnis laden.
00:00:14Das klingt nach einem produktionsreifen Ersatz. Ist es aber nicht.
00:00:17Aber die spannendste Version dieses Projekts wurde noch nicht einmal veröffentlicht.
00:00:21Was genau sehen wir hier also? Ist das die Zukunft von Postgres oder nur ein KI-Experiment?
00:00:30Um zu verstehen, warum das wichtig ist, muss man das Problem verstehen.
00:00:36Postgres ist eine der besten Datenbanken, die je gebaut wurden, seien wir ehrlich.
00:00:40Aber es trägt auch fast vier Jahrzehnte an Architektur und rund eine Million Zeilen C mit sich herum.
00:00:46Jede Client-Verbindung erhält ihren eigenen Backend-Prozess.
00:00:49Diese Isolation ist nützlich, bedeutet aber auch mehr Speicheraufwand, mehr Druck zur Nutzung von Connection Pooling,
00:00:56und größere Schwierigkeiten, den Zustand über parallele Arbeiten hinweg zu teilen.
00:01:00PGRust schlägt einen anderen Weg ein.
00:01:02Behalte das Postgres-Verhalten, die Client-Erfahrung und die Festplattenformate bei, aber ersetze die Engine darunter durch Rust.
00:01:09Dies ist keine Postgres-Erweiterung.
00:01:11Es ist kein Feature, das oben draufgesetzt wurde.
00:01:13Es ist völlig eigenständig, eine Implementierung, die versucht, sich genau wie Postgres zu verhalten.
00:01:18Wir sehen derzeit viele Umschreibungen in Rust, so wie wir neulich über Bunn berichtet haben, das seine gesamte Codebasis in Rust neu geschrieben hat.
00:01:25Ich werde es irgendwo hier einblenden.
00:01:27Das klingt alles gut, aber fühlt es sich auch wirklich wie ein echtes Postgres an?
00:01:31Das wurde noch nicht richtig getestet.
00:01:32Wenn Sie Programmier-Tools mögen, die Ihren Workflow beschleunigen, abonnieren Sie unbedingt den Kanal.
00:01:36Wir veröffentlichen ständig neue Videos.
00:01:38Nun, ich starte mit dem offiziellen Docker-Image und verbinde mich dann mit einem ganz normalen PSQL-Client.
00:01:43Nichts Angepasstes.
00:01:44So, ich bin drin.
00:01:46Zuerst prüfen wir die Version.
00:01:48Wie Sie sehen können, meldet es sich als PGRust mit der neuesten Version.
00:01:53Jetzt kann ich eine Tabelle erstellen, einige Daten einfügen und mir einen Abfrageplan ansehen.
00:01:59Ich werde das einfach hier in meinem Terminal ausführen.
00:02:01Von außen ist das absolut nicht von Postgres zu unterscheiden.
00:02:05Gleicher Client, gleiches SQL, gleiche Ausgabe.
00:02:08Man kann sogar sehen, dass der Abfrageplaner einen Index-Scan gewählt und uns echte Ausführungsstatistiken geliefert hat.
00:02:14Um das Ganze etwas interessanter zu machen, fügen wir 100.000 Zeilen ein und führen eine weitere Abfrage aus.
00:02:20Das sind einfach 100.000 generierte Datenzeilen.
00:02:23Wir laden sie hier hinein.
00:02:25Was ist also der Sinn von alledem?
00:02:27Okay, nun, gute Frage.
00:02:28In dieser frühen Version werden wir keine dramatischen Geschwindigkeitsverbesserungen gegenüber dem regulären Postgres sehen.
00:02:35Die größeren Leistungsversprechen stammen aus einer unveröffentlichten Entwicklungsversion, die auf ein “Thread-per-Connection”-Modell umstellt.
00:02:43Das beweist jedoch, dass es sich nicht nur um eine Teilimplementierung handelt.
00:02:47Es hat die vollständige offizielle Postgres-Regressionstest-Suite bestanden, über 46.000 Abfragen.
00:02:53Es spricht das echte Wire-Protokoll und verfügt über eine funktionierende Abfrageplanung in der Storage-Engine.
00:02:59Das ist ein echter Datenbankserver.
00:03:01Er ist nur in Rust geschrieben.
00:03:03Während dies voranschreitet, könnten wir ernsthafte Leistungssteigerungen bei der Geschwindigkeit sehen.
00:03:08Warum also nicht einfach eine weitere Postgres-Erweiterung erstellen?
00:03:12Weil Erweiterungen auf dem ursprünglichen Postgres-Kern aufbauen.
00:03:16Ein Fork kann diesen Kern zwar ändern, erbt dann aber dieselbe Architektur und die dauerhafte Aufgabe, mit dem Upstream-Postgres Schritt zu halten.
00:03:25Es gibt Datenbanken wie CockroachDB und YugaByte, aber das sind unabhängige verteilte Datenbanken.
00:03:31Genaue Drop-in-Kompatibilität ist nicht ihr Hauptziel.
00:03:35PG Rust versucht etwas anderes.
00:03:37Es verwendet das tatsächliche Postgres-Verhalten als Spezifikation.
00:03:41Die aktuelle Version zielt auf Postgres 18.3 ab.
00:03:44Sie besteht die Standard-Regressionstests und Isolationstests und ist kompatibel genug, um von einem bestehenden Postgres 18.3-Datenverzeichnis zu starten.
00:03:53Das größere Experiment findet in einer separaten, unveröffentlichten Version statt, und diese Version ersetzt angeblich das “Process-per-Connection”-Modell von Postgres durch ein “Thread-per-Connection”-Modell.
00:04:05Beim normalen Postgres-Modell erhält jede Verbindung ihren eigenen Prozess.
00:04:09Beim neuen Modell erhält jede Verbindung einen Thread innerhalb desselben Prozesses.
00:04:14Das kann den Overhead pro Verbindung senken und es für verschiedene Teile der Datenbank einfacher machen, Informationen tatsächlich zu teilen.
00:04:21Aber bei alledem gibt es doch einen Kompromiss, oder?
00:04:24Getrennte Prozesse schaffen auch nützliche Barrieren zwischen Verbindungen.
00:04:28Wenn ein Prozess fehlschlägt, kann diese Trennung helfen, den Schaden zu begrenzen.
00:04:32Bei Threads könnte eine unsichere Erweiterung oder ein Speicherfehler einen größeren Teil des Servers beeinträchtigen.
00:04:38Also ist “Thread-per-Connection” nicht automatisch besser.
00:04:41Es öffnet nur neue Türen, kann aber auch einige Sicherheitsvorkehrungen entfernen.
00:04:45Dann gibt es noch den zweiten wichtigen Teil der Geschichte: KI.
00:04:49Michael Malice und Jason Siebel haben Coding-Agenten intensiv genutzt, um die Neuentwicklung zu beschleunigen.
00:04:54Die veröffentlichte Version folgt an vielen Stellen bewusst der ursprünglichen Postgres-Struktur.
00:04:59In der unveröffentlichten Version versuchen sie größere architektonische Änderungen.
00:05:03Das eigentliche Experiment ist also nicht einfach: Kann Rust Postgres schneller machen?
00:05:08Es ist eher: Kann KI eine so große Neuentwicklung erschwinglich genug machen, dass Entwickler die Architektur darunter tatsächlich überdenken können?
00:05:16Denn KI wurde hier intensiv genutzt.
00:05:19Ändert das nun etwas?
00:05:20Nun, vielleicht.
00:05:21Es ist auch der Punkt, an dem wir etwas langsamer werden müssen.
00:05:25Die veröffentlichte Version ist nicht stark optimiert.
00:05:28Die wesentlichen Leistungsversprechen stammen aus der unveröffentlichten “Thread-per-Connection”-Version, die wir im Moment nicht wirklich testen können.
00:05:36Die Entwickler behaupten, etwa 50% mehr Leistung bei transaktionalen Workloads zu erzielen.
00:05:40Sie behaupten außerdem, etwa 300-mal die Leistung von Postgres bei analytischen Workloads zu erreichen.
00:05:45Diese Zahlen sind riesig, aber der Code hinter diesen Ergebnissen steht derzeit für keinerlei Inspektion oder Benchmarking zur Verfügung.
00:05:53Daher gibt es hier noch viel Spekulation.
00:05:57Es scheint hier eine gute 50-50-Aufteilung zu geben, zumindest wenn man online liest, mit Fragen, die in etwa so aussehen.
00:06:03Das sind nur die Issues hier auf GitHub.
00:06:05Dann bekommt man sogar eine Frage wie diese, richtig?
00:06:08Was eine vollkommen berechtigte Frage ist.
00:06:10Wenn man sich dieses Issue durchliest, scheinen die Entwickler entschlossen zu sein, das tatsächlich zum Laufen zu bringen.
00:06:15Wir haben also noch keine echten Statistiken.
00:06:17Das bedeutet jedoch nicht automatisch, dass die Zahlen falsch sind.
00:06:20Es bedeutet nur, dass wir sie als vielversprechende Behauptungen behandeln sollten, nicht als feststehende Fakten.
00:06:24Und ehrlich gesagt ist der genaue Multiplikator vielleicht nicht der wichtigste Teil.
00:06:28Wir müssen nicht das gesamte Postgres-Projekt ändern, bevor wir erfahren, ob eine Idee tatsächlich funktioniert oder nicht.
00:06:34Diese Freiheit ist möglicherweise wertvoller als jedes einzelne Benchmark, das wir bekommen können.
00:06:38Die Reaktion der Entwickler auf all diese Rust-Umschreibungen, sogar auf dieses PG Rust, war massiv.
00:06:44Die Hauptdiskussion auf Hacker News erreichte Hunderte von Punkten und Kommentaren, aber auch hier ist die Reaktion gespalten.
00:06:50Beide Seiten bringen gute Argumente vor.
00:06:52Erstens ist das Bestehen jeder Regressionstestabfrage eine ernsthafte Leistung.
00:06:56Viele Projekte behaupten, Postgres-kompatibel zu sein.
00:06:59Dieser Ausdruck kann fast alles bedeuten.
00:07:01PG Rust hat ein messbares Ziel.
00:07:04Die echten Postgres-Tests entscheiden darüber.
00:07:07Und die Geschwindigkeit dieser Neuentwicklung deutet darauf hin, dass Coding-Agenten die Kosten für große Infrastrukturexperimente komplett verändern könnten.
00:07:13Ideen, die einst zu teuer für einen Versuch erschienen, werden nun scheinbar machbarer.
00:07:19Nun zur anderen Seite: Das Bestehen von Regressionstests ist nicht dasselbe wie das Verdienen von Vertrauen für die Produktion.
00:07:24Diese Tests ersetzen nicht jahrelange Tests zur Absturz-Wiederherstellung und Replikation oder Datenbanken, die monatelang ohne Unterbrechung laufen.
00:07:31Ein Projekt kann jeden bekannten Test bestehen und trotzdem in einer Situation scheitern, an die niemand auch nur gedacht hat.
00:07:37Hunderttausende Zeilen Code zu generieren ist eine Herausforderung.
00:07:42Kompatibilität mit Erweiterungen ist eine weitere große Lücke.
00:07:45Sollten Sie nun Ihren produktiven Postgres-Cluster durch PG Rust ersetzen?
00:07:49Nein, auf keinen Fall.
00:07:51Das Projekt selbst ist nicht produktionsreif.
00:07:53Es wird so angegeben.
00:07:54Es ist nicht vollständig optimiert.
00:07:56In wichtigen Bereichen der Kompatibilität, einschließlich des Erweiterungs-Ökosystems, sind sie noch nicht fertig.
00:08:02Aber sollten Sie es ausprobieren?
00:08:03Sicher.
00:08:03Wenn Sie mit Datenbanken, Rust, Abfrageausführung, Kompatibilitätstests oder KI-Entwicklung arbeiten, warum probieren Sie es nicht aus?
00:08:10Führen Sie das Docker-Image aus, testen Sie Ihre Client-Bibliothek damit, lesen Sie den Quellcode und sehen Sie, was passiert.
00:08:16Schreiben Sie also Ihr Urteil in die Kommentare.
00:08:18Wo geht die Reise mit diesem Projekt hin?
00:08:20Werden wir anfangen, mehr in Rust neu zu schreiben?
00:08:21Wir werden es herausfinden.
00:08:23Wenn Ihnen Programmier-Tipps und Tricks wie diese gefallen, abonnieren Sie unbedingt den BetterStack-Kanal.
00:08:26Wir sehen uns im nächsten Video.

Key Takeaway

PGRust demonstriert die Machbarkeit einer in Rust neugeschriebenen Postgres-Engine mit vollständiger Kompatibilität zu bestehenden Testsuiten, wobei der Einsatz von KI-Agenten die Entwicklung komplexer architektonischer Änderungen wie ein 'Thread-per-Connection'-Modell beschleunigt.

Highlights

  • Das in Rust entwickelte 'PGRust' besteht alle 46.000 Regressionstests der offiziellen Postgres-Testsuite.

  • Die Architektur von PGRust experimentiert mit einem 'Thread-per-Connection'-Modell anstelle des traditionellen 'Process-per-Connection'-Ansatzes von Postgres.

  • PGRust bietet Drop-in-Kompatibilität für bestehende Postgres 18.3-Datenverzeichnisse und Standard-PSQL-Clients.

  • Entwickler berichten von einer potenziellen Leistungssteigerung um 50 % bei transaktionalen Workloads und bis zu 300-facher Leistung bei analytischen Abfragen in einer noch unveröffentlichten Entwicklungsversion.

  • KI-Coding-Agenten beschleunigten die Neuentwicklung von PGRust erheblich und ermöglichten das Experimentieren mit fundamentalen architektonischen Änderungen.

Timeline

Grundlagen und Kompatibilität von PGRust

  • PGRust ist eine eigenständige, in Rust geschriebene Datenbank-Engine, keine bloße Erweiterung.
  • Die aktuelle Version besteht die gesamte offizielle Regressionstest-Suite mit 46.000 Abfragen.
  • Das System akzeptiert bestehende Postgres 18.3-Datenverzeichnisse und funktioniert mit Standard-PSQL-Clients.

Das Projekt verfolgt das Ziel, das Verhalten, die Client-Erfahrung und die Festplattenformate von Postgres beizubehalten, während der Kern durch eine Rust-Implementierung ersetzt wird. Von außen ist die Datenbank für Client-Anwendungen nicht von einem regulären Postgres-Server unterscheidbar. Sie unterstützt das echte Wire-Protokoll und führt Abfragepläne identisch aus.

Architektonische Neuerungen und Leistungsversprechen

  • Eine unveröffentlichte Entwicklungsversion implementiert ein 'Thread-per-Connection'-Modell.
  • Das neue Modell reduziert den Speicheraufwand und verbessert den Austausch von Zustandsdaten zwischen Verbindungen.
  • Der Übergang von Prozessen zu Threads reduziert die Isolationsbarrieren zwischen Verbindungen und birgt potenzielle Risiken für die Serverstabilität bei Speicherfehlern.

Während das traditionelle Postgres jedem Client einen eigenen Prozess zuweist, ermöglicht die neue Architektur die Ausführung innerhalb desselben Prozesses. Dies senkt den Overhead, erfordert jedoch eine sorgfältigere Handhabung von Sicherheitsvorkehrungen, da die isolierende Wirkung getrennter Prozesse wegfällt.

Rolle der KI und Entwicklungsstatus

  • KI-Coding-Agenten waren essenziell für die schnelle Implementierung der komplexen Codebasis.
  • Die veröffentlichte Version ist noch nicht für den produktiven Einsatz optimiert und weist Lücken in der Kompatibilität auf.
  • Die beeindruckenden Leistungsansprüche von bis zu 300-facher Geschwindigkeit bei analytischen Workloads sind bisher nicht unabhängig verifiziert.

Die Entwicklung von PGRust zeigt, dass KI die Kosten für große Infrastrukturprojekte drastisch senken kann. Trotz der bestandenen Regressionstests fehlen dem Projekt noch jahrelange Praxistests in Bezug auf Stabilität, Absturz-Wiederherstellung und Replikation. Es wird explizit davon abgeraten, bestehende produktive Cluster derzeit zu ersetzen.

Community Posts

View all posts