PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Gatilho do Postgres para atualizar o cache Java


Não posso falar com o MyBatis, mas posso dizer que o PostgreSQL tem um sistema de publicação/assinatura integrado, o que permite fazer isso com muito menos hackers.

Primeiro, configure um gatilho em widgets que é executado em cada operação de inserção, atualização e exclusão. Faça com que extraia a chave primária e NOTIFY widgets_changed, id . (Bem, de PL/pgSQL, você provavelmente gostaria de PERFORM pg_notify(...) .) O PostgreSQL transmitirá sua notificação se e quando essa transação for confirmada, tornando a notificação e as alterações de dados correspondentes visíveis para outras conexões.

No cliente, você deseja executar um thread dedicado a manter esse mapa atualizado. Ele se conectaria ao PostgreSQL, LISTEN widgets_changed para começar a enfileirar notificações, SELECT * FROM widgets para preencher o mapa e aguarde a chegada de notificações. (A verificação de notificações aparentemente envolve a pesquisa do driver JDBC , o que é péssimo, mas não tão ruim quanto você imagina. Consulte PgNotificationPoller para uma implementação concreta.) Depois de ver uma notificação, procure o registro indicado e atualize seu mapa. Observe que é importante LISTEN antes do SELECT * inicial , pois os registros podem ser alterados entre SELECT * e LISTEN .

Essa abordagem não exige que o PostgreSQL saiba nada sobre seu aplicativo. Basta enviar notificações; seu aplicativo faz o resto. Não há scripts de shell, HTTP e callbacks, permitindo que você reconfigure/reimplante seu aplicativo sem também ter que reconfigurar o banco de dados. É apenas um banco de dados e pode ser feito backup, restaurado, replicado etc. sem complicações extras. Da mesma forma, seu aplicativo não tem complexidades extras:tudo o que ele precisa é de uma conexão com o PostgreSQL, que você já possui.