PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Postgres-Trigger zum Aktualisieren des Java-Cache

Ich kann nicht mit MyBatis sprechen, aber ich kann Ihnen sagen, dass PostgreSQL ein integriertes Publish/Subscribe-System hat, mit dem Sie dies mit viel weniger Hacking tun könnten.

Richten Sie zuerst einen Trigger für widgets ein die bei jedem Einfüge-, Aktualisierungs- und Löschvorgang ausgeführt wird. Lassen Sie den Primärschlüssel extrahieren und NOTIFY widgets_changed, id . (Nun, von PL/pgSQL würden Sie wahrscheinlich PERFORM pg_notify(...) wollen .) PostgreSQL sendet Ihre Benachrichtigung, wenn diese Transaktion festgeschrieben wird, und macht sowohl die Benachrichtigung als auch die entsprechenden Datenänderungen für andere Verbindungen sichtbar.

Im Client möchten Sie einen Thread ausführen, der dazu bestimmt ist, diese Karte auf dem neuesten Stand zu halten. Es würde sich mit PostgreSQL verbinden, LISTEN widgets_changed um Warteschlangenbenachrichtigungen zu starten, SELECT * FROM widgets um die Karte zu füllen und auf Benachrichtigungen zu warten. (Die Suche nach Benachrichtigungen beinhaltet anscheinend das Abfragen des JDBC-Treibers , was scheiße ist, aber nicht so schlimm, wie Sie vielleicht denken. Siehe PgNotificationPoller für eine konkrete Implementierung.) Sobald Sie eine Benachrichtigung sehen, suchen Sie den angegebenen Datensatz und aktualisieren Sie Ihre Karte. Beachten Sie, dass es wichtig ist, LISTEN vor dem anfänglichen SELECT * , da Datensätze zwischen SELECT * geändert werden konnten und LISTEN .

Bei diesem Ansatz muss PostgreSQL nichts über Ihre Anwendung wissen. Es muss lediglich Benachrichtigungen senden; Ihre Bewerbung erledigt den Rest. Es gibt keine Shell-Skripte, kein HTTP und keine Rückrufe, sodass Sie Ihre Anwendung neu konfigurieren/bereitstellen können, ohne auch die Datenbank neu konfigurieren zu müssen. Es ist nur eine Datenbank und kann ohne zusätzliche Komplikationen gesichert, wiederhergestellt, repliziert usw. werden. Auch Ihre Anwendung hat keine zusätzlichen Komplexitäten:Sie benötigt lediglich eine Verbindung zu PostgreSQL, die Sie bereits haben.