Postgres LISTEN/NOTIFY se comporta bien a gran escala
La función LISTEN/NOTIFY de Postgres se utiliza para notificaciones de baja latencia y streams. Aunque tiene una mala reputación en cuanto a escalabilidad, se puede optimizar para alcanzar altos niveles de rendimiento.
Algunos hechos clave sobre LISTEN/NOTIFY son: * Permite a los lectores bloquear y esperar notificaciones de los escritores cuando se publica un nuevo chunk en el stream. * Utiliza un bloqueo global exclusivo durante el commit de transacciones que llaman a NOTIFY. * Este bloqueo es necesario para garantizar que las notificaciones se envían en orden de commit de transacciones. * La función LISTEN/NOTIFY se puede utilizar para streams de baja latencia y notificaciones duraderas.
“El contexto necesario para entender este tema es que Postgres es un sistema de gestión de bases de datos relacionales que se utiliza ampliamente en aplicaciones de gran escala”
La implementación inicial de LISTEN/NOTIFY-backed streams presentaba problemas de rendimiento a gran escala, alcanzando solo 2,9 mil escrituras de stream por segundo. Sin embargo, después de optimizar la función, se logró alcanzar 60 mil escrituras de stream por segundo con una latencia de milisegundos en un solo servidor Postgres.
El contexto necesario para entender este tema es que Postgres es un sistema de gestión de bases de datos relacionales que se utiliza ampliamente en aplicaciones de gran escala. La función LISTEN/NOTIFY es una herramienta poderosa que permite a los desarrolladores crear streams y notificaciones de baja latencia, pero requiere una optimización cuidadosa para alcanzar altos niveles de rendimiento.
En resumen, la función LISTEN/NOTIFY de Postgres se puede optimizar para alcanzar altos niveles de rendimiento y escalabilidad, lo que la hace una herramienta valiosa para los desarrolladores que necesitan crear streams y notificaciones de baja latencia. Con la optimización adecuada, se puede alcanzar un rendimiento de 60 mil escrituras de stream por segundo con una latencia de milisegundos en un solo servidor Postgres.