Postgres fue reescrito en Rust... y de alguna manera pasó todas las pruebas
BBetter Stack
컴퓨터/소프트웨어창업/스타트업AI/미래기술
스크립트
00:00:00Alguien recreó Postgres en Rust y, de alguna manera, la versión lanzada ahora supera las 46,000 consultas de regresión de Postgres.
00:00:08Funciona con PSQL normal. Incluso puede iniciar un directorio de datos existente de Postgres 18.3.
00:00:14Eso suena a un reemplazo listo para producción. No lo es.
00:00:17Pero la versión más emocionante de este proyecto aún ni siquiera se ha lanzado.
00:00:21¿Así que qué estamos viendo exactamente aquí? ¿Es este el futuro de Postgres o solo un experimento de IA?
00:00:30Ahora, para entender por qué esto importa, necesitas entender el problema.
00:00:36Postgres es una de las mejores bases de datos jamás creadas, admitámoslo.
00:00:40Pero también conlleva casi cuatro décadas de arquitectura y aproximadamente un millón de líneas de C.
00:00:46Cada conexión de cliente obtiene su propio proceso backend.
00:00:49Ese aislamiento es útil, pero también significa más sobrecarga de memoria, más presión para usar conexión pooling,
00:00:56y más dificultad para compartir estado a través de trabajo paralelo.
00:01:00PGRust toma un camino diferente.
00:01:02Mantener el comportamiento de Postgres, mantener la experiencia del cliente, mantener los formatos de disco, pero reemplazar el motor subyacente con Rust.
00:01:09Esto no es una extensión de Postgres.
00:01:11No es una funcionalidad añadida encima.
00:01:13Esto es completamente independiente, una implementación tratando de comportarse exactamente como Postgres.
00:01:18Estamos viendo muchas reescrituras en Rust ahora, justo como la que cubrimos el otro día sobre Bun reescribiendo toda su base de código con Rust.
00:01:25Lo pondré en algún lugar por aquí.
00:01:27Y ahora, todo esto suena bien, ¿pero realmente se siente como un Postgres real?
00:01:31Menos probado adecuadamente.
00:01:32Si disfrutas de herramientas de codificación que aceleran tu flujo de trabajo, asegúrate de suscribirte.
00:01:36Tenemos videos saliendo todo el tiempo.
00:01:38Ahora, voy a empezar con la imagen oficial de Docker, luego conectándome con un cliente PSQL completamente normal.
00:01:43Nada personalizado.
00:01:44Ya estoy dentro.
00:01:46Primero, revisemos la versión.
00:01:48Como puedes ver, se reporta a sí mismo como PGRust con la última versión.
00:01:53Ahora, puedo crear una tabla, insertar algunos datos y mirar un plan de consulta.
00:01:59Simplemente voy a ejecutar esto aquí mismo en mi terminal.
00:02:01Desde fuera, esto es completamente indistinguible de Postgres.
00:02:05Mismo cliente, mismo SQL, misma salida.
00:02:08Incluso puedes ver que el planificador de consultas eligió un escaneo de índice y nos dio estadísticas de ejecución reales.
00:02:14Ahora, para hacer esto un poco más interesante, insertemos 100,000 filas y ejecutemos otra consulta.
00:02:20Esto es solo una generación de 100K filas de datos.
00:02:23Vamos a colocarlo aquí.
00:02:25Ahora, ¿cuál es el punto de todo esto?
00:02:27Está bien, bueno, buena pregunta.
00:02:28Bueno, en esta versión temprana actual, no vamos a ver mejoras de velocidad dramáticas sobre el Postgres regular.
00:02:35Las mayores afirmaciones de rendimiento vienen de una versión de desarrollo no lanzada que cambia a un modelo de hilo por conexión.
00:02:43Sin embargo, todo esto prueba que esto no es solo una implementación parcial.
00:02:47Ha pasado el conjunto de pruebas de regresión oficial completo de Postgres, más de 46,000 consultas.
00:02:53Habla el protocolo real de cable y tiene un planificador de consultas funcional en el motor de almacenamiento.
00:02:59Este es un servidor de base de datos real.
00:03:01Simplemente está escrito en Rust.
00:03:03Así que, con esto progresando, podríamos ver algunas mejoras serias de rendimiento en el lado de la velocidad de las cosas.
00:03:08Entonces, ahora la pregunta es, ¿por qué no solo crear otra extensión de Postgres?
00:03:12Porque las extensiones se asientan sobre el núcleo original de Postgres.
00:03:16Un fork puede cambiar ese núcleo, pero luego hereda la misma arquitectura y el trabajo permanente de mantenerse al día con el Postgres ascendente.
00:03:25Tienes bases de datos como CockroachDB y YugaByte, pero son bases de datos distribuidas independientes.
00:03:31La compatibilidad exacta de sustitución no es su objetivo principal.
00:03:35PG Rust está intentando algo más.
00:03:37Usa el comportamiento real de Postgres como especificación.
00:03:41La versión actual apunta a Postgres 18.3.
00:03:44Pasa la suite de regresión por defecto y las pruebas de aislamiento, y es lo suficientemente compatible para iniciar desde un directorio de datos existente de Postgres 18.3.
00:03:53El experimento más grande aquí está ocurriendo en una versión separada no publicada, y esa versión supuestamente reemplaza el modelo de proceso por conexión de Postgres con un modelo de hilo por conexión.
00:04:05Con el modelo normal de Postgres, cada conexión obtiene su propio proceso.
00:04:09Con el nuevo modelo, cada conexión obtiene un hilo dentro del mismo proceso.
00:04:14Eso puede reducir la sobrecarga por conexión y hacer más fácil para diferentes partes de la base de datos compartir información realmente.
00:04:21Pero con todo esto, habrá un intercambio, ¿verdad?
00:04:24Los procesos separados también crean muros útiles entre las conexiones.
00:04:28Si un proceso falla, esa separación puede ayudar a contener el daño.
00:04:32Con hilos, una extensión insegura o un error de memoria podría afectar a más parte del servidor.
00:04:38Así que el hilo por conexión no es automáticamente mejor.
00:04:41Simplemente abre nuevas puertas, pero también puede eliminar algunas barandillas de seguridad.
00:04:45Luego está la segunda parte principal de la historia, la IA.
00:04:49Michael Malice y Jason Siebel usaron agentes de codificación intensivamente para acelerar la reescritura.
00:04:54La versión publicada sigue intencionalmente la estructura original de Postgres en muchos lugares.
00:04:59La versión no publicada es donde están intentando cambios arquitectónicos más grandes.
00:05:03Así que el experimento real no es simplemente, ¿puede Rust hacer Postgres más rápido?
00:05:08Es más como, ¿puede la IA hacer que una reescritura de este tamaño sea lo suficientemente asequible para que los desarrolladores puedan realmente repensar la arquitectura subyacente a las cosas?
00:05:16Porque la IA se usó intensivamente aquí.
00:05:19Ahora, ¿cambia esto las cosas?
00:05:20Bueno, podría.
00:05:21También es donde necesitamos reducir la velocidad un poco.
00:05:25La versión lanzada no está muy optimizada.
00:05:28Las mayores afirmaciones de rendimiento vienen de la versión de hilo por conexión no publicada, la cual en este momento no podemos probar del todo.
00:05:36Los desarrolladores reclaman aproximadamente un 50% mejor rendimiento en cargas de trabajo transaccionales.
00:05:40También reclaman alrededor de 300 veces el rendimiento de Postgres en cargas de trabajo analíticas.
00:05:45Esos números son enormes, pero el código detrás de esos resultados no está actualmente disponible para ningún tipo de inspección o benchmarking.
00:05:53Así que, por lo tanto, todavía hay mucha especulación.
00:05:57Parece que hay una buena división 50-50 aquí, al menos leyendo en línea, con preguntas que se ven como estas.
00:06:03Estos son solo los problemas aquí en GitHub.
00:06:05Luego incluso obtienes un problema como este, ¿verdad?
00:06:08Que es una pregunta completamente razonable.
00:06:10Mientras lees este problema, los desarrolladores parecen inflexibles sobre hacer que esto funcione realmente.
00:06:15Así que, no tenemos estadísticas reales todavía.
00:06:17Eso no significa automáticamente que los números sean falsos, sin embargo.
00:06:20Solo significa que deberíamos tratarlos como afirmaciones prometedoras, no como hechos establecidos.
00:06:24Y honestamente, el multiplicador exacto podría no ser la parte más importante.
00:06:28No necesitamos cambiar todo el proyecto Postgres antes de saber si una idea funciona realmente o no.
00:06:34Esa libertad podría ser más valiosa que cualquier benchmarking individual que podamos obtener.
00:06:38Ahora, la reacción de los desarrolladores con todas estas reescrituras en Rust, incluso en este PG Rust, ha sido masiva.
00:06:44La discusión principal de Hacker News pasó cientos de puntos y comentarios, pero de nuevo, la respuesta está dividida.
00:06:50Ambos lados están haciendo buenos puntos.
00:06:52Primero, pasar cada consulta de regresión es un logro serio.
00:06:56Muchos proyectos dicen ser compatibles con Postgres.
00:06:59Esa frase puede significar casi cualquier cosa.
00:07:01PG Rust tiene un objetivo medible.
00:07:04Las pruebas reales de Postgres son el juez de esto.
00:07:07Y la velocidad de esta reescritura sugiere que los agentes de codificación pueden cambiar completamente el costo de grandes experimentos de infraestructura.
00:07:13Ideas que alguna vez parecieron demasiado costosas de intentar ahora aparentemente se están volviendo más posibles.
00:07:19Ahora, por el otro lado de las cosas, pasar las pruebas de regresión no es lo mismo que ganar la confianza de producción.
00:07:24Esas pruebas no reemplazan años de recuperación de fallos y pruebas de replicación, o bases de datos que funcionan durante meses sin detenerse.
00:07:31Un proyecto puede pasar cada prueba conocida y aun así fallar en una situación que nadie pensó en probar.
00:07:37Generar cientos de miles de líneas de código es un desafío.
00:07:42La compatibilidad con extensiones es otra brecha importante.
00:07:45Ahora, ¿deberías reemplazar tu clúster de Postgres de producción con PG Rust?
00:07:49No, absolutamente no.
00:07:51El proyecto en sí mismo no está listo para producción.
00:07:53Está declarado.
00:07:54No está totalmente optimizado.
00:07:56En áreas importantes de compatibilidad, incluyendo el ecosistema de extensiones, todavía están sin terminar.
00:08:02Pero, ¿deberías probarlo?
00:08:03Claro.
00:08:03Si trabajas con bases de datos, Rust, ejecución de consultas, pruebas de compatibilidad o desarrollo de IA, ¿por qué no intentarlo?
00:08:10Ejecuta la imagen de Docker, prueba tu biblioteca cliente contra ella, lee la fuente y mira qué sucede.
00:08:16Así que, deja tu veredicto en los comentarios.
00:08:18¿Hacia dónde va este proyecto?
00:08:20¿Vamos a empezar a reescribir más en Rust?
00:08:21Vamos a averiguarlo.
00:08:23Si disfrutas de consejos y trucos de codificación como este, asegúrate de suscribirte al canal BetterStack.
00:08:26Nos vemos en otro video.