Particionamiento hash de PostgreSQL 20 veces más rápido: evitando búsquedas de catálogo

2025-08-27
Particionamiento hash de PostgreSQL 20 veces más rápido: evitando búsquedas de catálogo

El particionamiento hash de PostgreSQL genera una sobrecarga de búsqueda de catálogo en aplicaciones de alto rendimiento. Este artículo presenta una técnica de optimización que evita las búsquedas de catálogo de PostgreSQL precalculando los índices de partición en la capa de la aplicación. El uso de la gema Ruby `pg_hash_func` o la llamada directa a las funciones hash de PostgreSQL puede acelerar las consultas en más de 20 veces, reduciendo significativamente la latencia. Este enfoque es adecuado para escenarios críticos de rendimiento y ofrece más opciones para equilibrar simplicidad y rendimiento.

Leer más

Asistentes de código de IA: ¿bendición o maldición?

2025-06-17
Asistentes de código de IA: ¿bendición o maldición?

Los asistentes de codificación de IA se están volviendo cada vez más sofisticados, generando código limpio y eficiente. Sin embargo, esto puede llevar al 'cierre prematuro', donde los desarrolladores son seducidos por soluciones aparentemente perfectas e ignoran problemas más profundos. El artículo utiliza una analogía médica, comparando la IA a médicos experimentados que pueden perder una condición rara debido a su experiencia. El autor aconseja a los desarrolladores que evalúen críticamente las sugerencias de IA, exploren activamente varias soluciones y eviten caer en la trampa de las soluciones rápidas para mejorar la calidad del código y evitar la acumulación de deuda técnica.

Leer más
Desarrollo

Sorpresa de PostgreSQL: CTE, DELETE y LIMIT inesperados

2025-05-04
Sorpresa de PostgreSQL: CTE, DELETE y LIMIT inesperados

Surgió un comportamiento inesperado en PostgreSQL al usar una Expresión de Tabla Común (CTE) con DELETE ... RETURNING y LIMIT para procesar un lote de elementos. La intención era eliminar solo una fila, pero se eliminaron varias. `EXPLAIN ANALYZE` reveló una optimización de unión semijunta de bucle anidado, haciendo que la cláusula LIMIT 1 se ejecutara varias veces. La solución fue reestructurar la consulta, evitando la CTE y usando una subconsulta directamente en la cláusula WHERE de DELETE. Esto destaca que las CTE no siempre impiden las optimizaciones del plan de consulta, y un examen cuidadoso del plan es crucial para las operaciones críticas.

Leer más

Commit sincrónico de PostgreSQL: una compensación entre rendimiento y durabilidad

2025-03-19
Commit sincrónico de PostgreSQL: una compensación entre rendimiento y durabilidad

Esta publicación explora las implicaciones de rendimiento de la configuración `synchronous_commit` de PostgreSQL. Desactivarla aumenta significativamente el rendimiento de las transacciones, reduciendo la E/S y la carga de la CPU, pero introduce una pequeña ventana de riesgo para la pérdida de datos. El autor demuestra un aumento del 30% en TPS en sistemas con restricciones de E/S. El artículo aboga por un enfoque matizado, sugiriendo ajustar `synchronous_commit` por sesión, transacción u operación, con un ejemplo en Ruby on Rails proporcionado. El autor también observa que en Aurora PostgreSQL, establecer `synchronous_commit` en `off` produce las mayores ganancias de rendimiento.

Leer más
Desarrollo commit sincrónico

Escalando PostgreSQL: Problemas extraños y soluciones para startups de alto crecimiento

2025-02-09
Escalando PostgreSQL: Problemas extraños y soluciones para startups de alto crecimiento

Esta publicación aborda los desafíos comunes de escalamiento de PostgreSQL que enfrentan las startups de alto crecimiento. Cubre problemas como la contención de bloqueos, la hinchazón de índices, las ineficiencias de almacenamiento TOAST y las complejidades del escalamiento vertical versus horizontal, las tablas de solo anexión versus las tablas con muchas actualizaciones y la multitenencia. Para cada problema, se ofrecen soluciones prácticas, que van desde ajustes de parámetros de la base de datos y herramientas de concurrencia hasta repensar los patrones de acceso a datos y utilizar funciones como bloqueos consultivos. El autor también explora temas avanzados, como las migraciones de esquema bajo carga, las actualizaciones con tiempo de inactividad cero y las estrategias eficientes de consultas COUNT. Este es un recurso valioso para los ingenieros que se esfuerzan por optimizar el rendimiento de PostgreSQL en entornos exigentes.

Leer más

¿Mocks de bases de datos: más problemas de los que valen la pena?

2024-12-30
¿Mocks de bases de datos: más problemas de los que valen la pena?

Aunque es tentador por su velocidad y simplicidad, el autor argumenta que el uso de mocks de bases de datos para las pruebas, en última instancia, causa más problemas de los que resuelve. Un ejemplo de creación de usuario destaca las diferencias entre mocks y pruebas contra una base de datos real. Las pruebas de bases de datos reales revelan problemas potenciales desde el principio, como violaciones de restricciones únicas, manejo de valores predeterminados y cuellos de botella de rendimiento, lo que ahorra tiempo de depuración y reduce los riesgos de producción. A medida que las aplicaciones evolucionan y los esquemas cambian, las pruebas de bases de datos reales manejan mejor las nuevas validaciones, las modificaciones de tipo de datos y los cambios en la precisión de la marca de tiempo, asegurando que el código esté alineado con la base de datos real. El autor sugiere priorizar las pruebas de bases de datos reales para las capas de acceso a datos, mientras que las usa en la capa de servicio para exponer las interacciones de la lógica de negocios con los datos. Las capas de controladores, sin embargo, pueden simular llamadas de servicio de manera efectiva. El equilibrio entre las pruebas de bases de datos reales y los mocks es clave para construir aplicaciones robustas.

Leer más