Postgres a été réécrit en Rust… et a miraculeusement réussi tous les tests

BBetter Stack
컴퓨터/소프트웨어창업/스타트업AI/미래기술

스크립트

00:00:00Quelqu'un a reconstruit Postgres en Rust, et la version publiée passe désormais les 46 000 requêtes de régression de Postgres.
00:00:08Il fonctionne avec PSQL normal. Il peut même démarrer un répertoire de données Postgres 18.3 existant.
00:00:14Cela ressemble à un remplaçant prêt pour la production. Ce n'est pas le cas.
00:00:17Mais la version la plus intéressante de ce projet n'a même pas encore été publiée.
00:00:21Alors, que voyons-nous exactement ici ? Est-ce le futur de Postgres ou juste une expérience basée sur l'IA ?
00:00:30Maintenant, pour comprendre pourquoi c'est important, il faut comprendre le problème.
00:00:36Postgres est l'une des meilleures bases de données jamais construites, il faut l'admettre.
00:00:40Mais elle porte aussi près de quatre décennies d'architecture et environ un million de lignes de code en C.
00:00:46Chaque connexion client obtient son propre processus backend.
00:00:49Cette isolation est utile, mais cela signifie aussi plus de surcharge mémoire, plus de pression pour utiliser le regroupement de connexions,
00:00:56et plus de difficultés à partager l'état lors de travaux parallèles.
00:01:00PGRust emprunte une voie différente.
00:01:02Gardez le comportement de Postgres, l'expérience client et les formats de disque, mais remplacez le moteur sous-jacent par du Rust.
00:01:09Ce n'est pas une extension Postgres.
00:01:11Ce n'est pas une fonctionnalité ajoutée par-dessus.
00:01:13C'est une implémentation totalement séparée qui tente de se comporter exactement comme Postgres.
00:01:18Nous voyons beaucoup de réécritures en Rust en ce moment, tout comme celle que nous avons couverte l'autre jour concernant Bunn réécrivant toute sa base de code en Rust.
00:01:25Je vais le mettre quelque part ici.
00:01:27Et maintenant, tout cela semble bien, mais est-ce que ça ressemble vraiment à du vrai Postgres ?
00:01:31Pas assez testé correctement.
00:01:32Si vous aimez les outils de codage qui accélèrent votre flux de travail, assurez-vous de vous abonner.
00:01:36Nous publions des vidéos tout le temps.
00:01:38Maintenant, je commence avec l'image Docker officielle, puis je me connecte avec un client PSQL tout à fait normal.
00:01:43Rien de personnalisé.
00:01:44Maintenant, je suis dedans.
00:01:46D'abord, vérifions la version.
00:01:48Comme vous pouvez le voir, il se signale comme étant PGRust avec la dernière version.
00:01:53Maintenant, je peux créer une table, insérer des données et regarder un plan de requête.
00:01:59Je vais juste exécuter ceci ici dans mon terminal.
00:02:01De l'extérieur, c'est totalement indiscernable de Postgres.
00:02:05Même client, même SQL, même sortie.
00:02:08Vous pouvez même voir que le planificateur de requêtes a choisi un scan d'index et nous a donné des statistiques d'exécution réelles.
00:02:14Maintenant, pour rendre cela un peu plus intéressant, insérons 100 000 lignes et exécutons une autre requête.
00:02:20Ce sont juste 100 000 lignes de données générées.
00:02:23Nous allons l'insérer ici.
00:02:25Alors, quel est l'intérêt de tout cela ?
00:02:27D'accord, eh bien, bonne question.
00:02:28Eh bien, dans cette version préliminaire actuelle, nous n'allons pas voir d'améliorations de vitesse spectaculaires par rapport à Postgres classique.
00:02:35Les meilleures promesses de performance viennent d'une version de développement non publiée qui passe à un modèle de thread par connexion.
00:02:43Tout cela prouve, cependant, qu'il ne s'agit pas seulement d'une implémentation partielle.
00:02:47Il a passé la suite complète de tests de régression officiels de Postgres, plus de 46 000 requêtes.
00:02:53Il utilise le véritable protocole de communication, et il a un moteur de stockage et un planificateur de requêtes fonctionnels.
00:02:59C'est un vrai serveur de base de données.
00:03:01Il est juste écrit en Rust.
00:03:03Donc, avec cette progression, nous pourrions voir de sérieuses améliorations de performance en termes de vitesse.
00:03:08Alors, maintenant la question est, pourquoi ne pas simplement créer une autre extension Postgres ?
00:03:12Parce que les extensions reposent sur le cœur original de Postgres.
00:03:16Un fork peut changer ce cœur, mais il hérite alors de la même architecture et de la tâche permanente de rester à jour avec Postgres en amont.
00:03:25Vous avez des bases de données comme CockroachDB et YugaByte, mais ce sont des bases de données distribuées indépendantes.
00:03:31Une compatibilité exacte n'est pas leur objectif principal.
00:03:35PG Rust essaie quelque chose d'autre.
00:03:37Il utilise le comportement réel de Postgres comme spécification.
00:03:41La version actuelle cible Postgres 18.3.
00:03:44Elle passe la suite de régression par défaut et les tests d'isolation, et elle est suffisamment compatible pour démarrer à partir d'un répertoire de données Postgres 18.3 existant.
00:03:53L'expérience plus large ici se déroule dans une version séparée non publiée, et cette version remplace apparemment le modèle de processus par connexion de Postgres par un modèle de thread par connexion.
00:04:05Avec le modèle Postgres normal, chaque connexion obtient son propre processus.
00:04:09Avec le nouveau modèle, chaque connexion obtient un thread à l'intérieur du même processus.
00:04:14Cela peut réduire la surcharge par connexion et faciliter le partage d'informations entre différentes parties de la base de données.
00:04:21Mais avec tout cela, il va y avoir un compromis, non ?
00:04:24Des processus séparés créent également des murs utiles entre les connexions.
00:04:28Si un processus échoue, cette séparation peut aider à limiter les dégâts.
00:04:32Avec les threads, une extension non sécurisée ou un bug mémoire pourrait affecter davantage le serveur.
00:04:38Donc, le thread par connexion n'est pas automatiquement meilleur.
00:04:41Cela ouvre juste de nouvelles portes, mais cela peut aussi supprimer certains garde-fous.
00:04:45Ensuite, il y a la deuxième partie majeure de l'histoire, l'IA.
00:04:49Michael Malice et Jason Siebel ont utilisé intensivement des agents de codage pour accélérer la réécriture.
00:04:54La version publiée suit intentionnellement la structure originale de Postgres à de nombreux endroits.
00:04:59La version non publiée est celle où ils essaient des changements architecturaux plus importants.
00:05:03Donc l'expérience réelle n'est pas simplement, est-ce que Rust peut rendre Postgres plus rapide ?
00:05:08C'est plutôt, est-ce que l'IA peut rendre une réécriture aussi importante assez abordable pour que les développeurs puissent vraiment repenser l'architecture sous-jacente ?
00:05:16Parce que l'IA a été largement utilisée ici.
00:05:19Maintenant, est-ce que cela change les choses ?
00:05:20Eh bien, peut-être.
00:05:21C'est aussi là que nous devons ralentir un peu.
00:05:25La version publiée n'est pas fortement optimisée.
00:05:28Les principales promesses de performance viennent de la version non publiée avec thread par connexion, que pour le moment nous ne pouvons pas tout à fait tester.
00:05:36Les développeurs revendiquent environ 50 % de meilleures performances sur les charges de travail transactionnelles.
00:05:40Ils revendiquent également environ 300 fois la performance de Postgres sur les charges de travail analytiques.
00:05:45Ces chiffres sont énormes, mais le code derrière ces résultats n'est pas actuellement disponible pour tout type d'inspection ou d'analyse comparative.
00:05:53Donc, d'où cela, il reste beaucoup de spéculation.
00:05:57Il semble y avoir une bonne répartition 50-50 ici, du moins en lisant en ligne, avec des questions qui ressemblent à celles-ci.
00:06:03Ce ne sont que les problèmes ici sur GitHub.
00:06:05Ensuite, vous avez même un problème comme celui-ci, n'est-ce pas ?
00:06:08Ce qui est une question tout à fait raisonnable.
00:06:10En lisant ce problème, les développeurs semblent déterminés à faire fonctionner cela.
00:06:15Donc, nous n'avons pas encore de statistiques réelles.
00:06:17Cela ne signifie pas automatiquement que les chiffres sont faux, cependant.
00:06:20Cela signifie juste que nous devrions les traiter comme des promesses, pas comme des faits établis.
00:06:24Et honnêtement, le multiplicateur exact n'est peut-être pas la partie la plus importante.
00:06:28Nous n'avons pas besoin de changer tout le projet Postgres avant d'apprendre si une idée fonctionne réellement ou non.
00:06:34Cette liberté peut être plus précieuse que n'importe quel benchmark unique que nous pouvons obtenir.
00:06:38Maintenant, la réaction des développeurs avec toutes ces réécritures en Rust, même sur ce PG Rust, a été massive.
00:06:44La principale discussion sur Hacker News a dépassé des centaines de points et de commentaires, mais là encore, la réponse est partagée.
00:06:50Les deux parties avancent de bons arguments.
00:06:52Premièrement, passer chaque requête de régression est une réalisation sérieuse.
00:06:56Beaucoup de projets prétendent être compatibles avec Postgres.
00:06:59Cette expression peut signifier presque tout.
00:07:01PG Rust a une cible mesurable.
00:07:04Les vrais tests Postgres sont le juge de cela.
00:07:07Et la vitesse de cette réécriture suggère que les agents de codage peuvent complètement changer le coût des grandes expériences d'infrastructure.
00:07:13Des idées qui semblaient autrefois trop coûteuses à tenter deviennent maintenant apparemment plus possibles.
00:07:19Maintenant, pour l'autre côté des choses, passer des tests de régression n'est pas la même chose que de gagner la confiance pour la production.
00:07:24Ces tests ne remplacent pas des années de récupération après crash et de tests de réplication, ou des bases de données qui fonctionnent pendant des mois sans s'arrêter.
00:07:31Un projet peut passer tous les tests connus et échouer quand même dans une situation que personne n'avait même pensé à tester.
00:07:37Générer des centaines de milliers de lignes de code est un défi.
00:07:42La compatibilité des extensions est un autre fossé majeur.
00:07:45Maintenant, devriez-vous remplacer votre cluster Postgres de production par PG Rust ?
00:07:49Non, absolument pas.
00:07:51Le projet lui-même n'est pas prêt pour la production.
00:07:53C'est déclaré.
00:07:54Il n'est pas entièrement optimisé.
00:07:56Dans les domaines majeurs de compatibilité, y compris l'écosystème des extensions, ils sont encore inachevés.
00:08:02Mais devriez-vous l'essayer ?
00:08:03Bien sûr.
00:08:03Si vous travaillez avec des bases de données, Rust, l'exécution de requêtes, les tests de compatibilité ou le développement d'IA, pourquoi ne pas essayer ?
00:08:10Exécutez l'image Docker, testez votre bibliothèque cliente contre elle, lisez le code source et voyez ce qui se passe.
00:08:16Alors, donnez votre verdict dans les commentaires.
00:08:18Où va ce projet ?
00:08:20Allons-nous commencer à réécrire davantage en Rust ?
00:08:21Nous allons le découvrir.
00:08:23Si vous aimez les conseils et astuces de codage comme celui-ci, assurez-vous de vous abonner à la chaîne BetterStack.
00:08:26On se voit dans une autre vidéo.

핵심 요약

PGRust démontre qu'une réécriture totale en Rust, assistée par l'IA, peut atteindre la compatibilité avec Postgres 18.3 tout en ouvrant la voie à une architecture basée sur les threads, bien que les gains de performance réels restent à valider.

하이라이트

  • PGRust est une réécriture complète du moteur Postgres en Rust, capable d'exécuter les 46 000 tests de régression officiels du logiciel original.

  • L'architecture de PGRust remplace le modèle de processus par connexion de Postgres par un modèle de thread par connexion.

  • La version de développement non publiée revendique une amélioration de 50 % des performances transactionnelles et une performance 300 fois supérieure sur les charges de travail analytiques.

  • L'utilisation intensive d'agents de codage basés sur l'IA a permis d'accélérer significativement la réécriture de l'architecture complexe de Postgres.

  • PGRust reste actuellement incompatible avec l'écosystème étendu des extensions Postgres et n'est pas prêt pour une utilisation en production.

타임라인

Architecture et objectifs de PGRust

  • PGRust implémente Postgres en Rust sans utiliser le cœur original en C.
  • Le projet maintient une compatibilité exacte avec les formats de disque et l'interface PSQL de Postgres 18.3.
  • Cette approche évite les limites liées à la surcharge mémoire du modèle de processus isolé de Postgres.

Postgres repose sur environ un million de lignes de code en C et une architecture où chaque connexion client génère son propre processus. Cette isolation engendre une consommation mémoire élevée et complique le partage d'état. PGRust cherche à résoudre ces points tout en offrant une expérience indiscernable de Postgres au niveau de l'utilisateur.

Validation technique et promesses de performance

  • Le projet passe la totalité des 46 000 tests de régression officiels de Postgres.
  • Le passage à un modèle de thread par connexion réduit la surcharge par utilisateur.
  • Les threads facilitent le partage d'informations entre les connexions, mais augmentent la vulnérabilité aux bugs mémoire.

Les tests montrent que le comportement de PGRust est identique à celui de Postgres classique lors de l'insertion de 100 000 lignes ou de l'analyse des plans de requête. Bien que les threads offrent des gains potentiels, ils suppriment les garde-fous naturels fournis par l'isolation des processus, augmentant le risque d'impact global en cas de défaillance.

Le rôle de l'IA et les perspectives futures

  • L'IA a été utilisée massivement pour automatiser la réécriture d'une architecture complexe.
  • Les chiffres de performance annoncés par les développeurs ne sont pas encore vérifiables via du code public.
  • L'absence de support pour l'écosystème d'extensions actuel limite l'utilité du projet en environnement réel.

Les développeurs affirment obtenir des gains de performance massifs dans des versions non publiées, mais ces données restent des promesses non vérifiées. Le débat au sein de la communauté met en balance la prouesse technique de compatibilité totale et le manque de confiance inhérent à un projet n'ayant pas subi des années de tests de réplication ou de récupération après crash.

커뮤니티 글

모든 글 보기