sql >> Database >  >> RDS >> PostgreSQL

Postgres-trigger om Java-cache bij te werken

Ik kan niet met MyBatis praten, maar ik kan je vertellen dat PostgreSQL een publish/subscribe-systeem heeft ingebouwd, waardoor je dit met veel minder hacking kunt doen.

Stel eerst een trigger in op widgets die bij elke invoeg-, update- en verwijderbewerking wordt uitgevoerd. Laat het de primaire sleutel extraheren en NOTIFY widgets_changed, id . (Nou, van PL/pgSQL wil je waarschijnlijk PERFORM pg_notify(...) .) PostgreSQL zal uw melding uitzenden als en wanneer die transactie wordt doorgevoerd, waardoor zowel de melding als de bijbehorende gegevenswijzigingen zichtbaar zijn voor andere verbindingen.

In de client zou je een thread willen starten die is bedoeld om deze kaart up-to-date te houden. Het zou verbinding maken met PostgreSQL, LISTEN widgets_changed om wachtrijmeldingen te starten, SELECT * FROM widgets om de kaart te vullen en te wachten tot er meldingen binnenkomen. (Het controleren op meldingen behelst blijkbaar het peilen van het JDBC-stuurprogramma , wat klote is, maar niet zo erg als je zou denken. Zie PgNotificationPoller voor een concrete implementatie.) Zodra u een melding ziet, zoekt u het aangegeven record op en werkt u uw kaart bij. Merk op dat het belangrijk is om LISTEN voor de eerste SELECT * , aangezien records kunnen worden gewijzigd tussen SELECT * en LISTEN .

Deze aanpak vereist niet dat PostgreSQL iets weet over uw toepassing. Het hoeft alleen maar meldingen te sturen; uw applicatie doet de rest. Er zijn geen shellscripts, geen HTTP en geen callbacks, zodat u uw toepassing opnieuw kunt configureren/opnieuw implementeren zonder ook de database opnieuw te hoeven configureren. Het is gewoon een database en er kan een back-up van worden gemaakt, worden hersteld, gerepliceerd, enz. zonder extra complicaties. Evenzo heeft uw applicatie geen extra complexiteit:het enige dat nodig is, is een verbinding met PostgreSQL, die u al heeft.




  1. Booleaanse eigenschap toewijzen aan Oracle met behulp van Entity Framework

  2. Wat is sneller:meerdere enkele INSERT's of één INSERT met meerdere rijen?

  3. 3 manieren om een ​​back-up te maken van een SQLite-database

  4. converteer lijst naar string om in mijn sql in één rij in python scrapy in te voegen