Postgres wurde in Rust neu geschrieben… und hat irgendwie jeden Test bestanden
BBetter Stack
컴퓨터/소프트웨어창업/스타트업AI/미래기술
스크립트
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.