sql >> Base de Datos >  >> RDS >> PostgreSQL

Desencadenador de Postgres para actualizar el caché de Java

No puedo hablar con MyBatis, pero puedo decirle que PostgreSQL tiene integrado un sistema de publicación/suscripción, lo que le permitiría hacer esto con mucha menos piratería.

Primero, configura un activador en widgets que se ejecuta en cada operación de inserción, actualización y eliminación. Haga que extraiga la clave principal y NOTIFY widgets_changed, id . (Bueno, desde PL/pgSQL, probablemente querrá PERFORM pg_notify(...) .) PostgreSQL transmitirá su notificación siempre y cuando esa transacción se confirme, haciendo que tanto la notificación como los cambios de datos correspondientes sean visibles para otras conexiones.

En el cliente, le gustaría ejecutar un subproceso dedicado a mantener este mapa actualizado. Se conectaría a PostgreSQL, LISTEN widgets_changed para comenzar a poner en cola las notificaciones, SELECT * FROM widgets para completar el mapa y esperar a que lleguen las notificaciones. (Buscar notificaciones aparentemente implica sondear el controlador JDBC , que apesta, pero no tan malo como podría pensar. Ver PgNotificationPoller para una implementación concreta). Una vez que vea una notificación, busque el registro indicado y actualice su mapa. Tenga en cuenta que es importante LISTEN antes del SELECT * inicial , ya que los registros se pueden cambiar entre SELECT * y LISTEN .

Este enfoque no requiere que PostgreSQL sepa nada sobre su aplicación. Todo lo que tiene que hacer es enviar notificaciones; su aplicación hace el resto. No hay scripts de shell, HTTP ni devoluciones de llamadas, lo que le permite reconfigurar/volver a implementar su aplicación sin tener que reconfigurar la base de datos. Es solo una base de datos, y se puede respaldar, restaurar, replicar, etc. sin complicaciones adicionales. Del mismo modo, su aplicación no tiene complejidades adicionales:todo lo que necesita es una conexión a PostgreSQL, que ya tiene.