PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Задействане на Postgres за актуализиране на кеша на Java

Не мога да говоря с MyBatis, но мога да ви кажа, че PostgreSQL има вградена система за публикуване/абониране, която ще ви позволи да правите това с много по-малко хакерство.

Първо настройте тригер за widgets който се изпълнява при всяка операция за вмъкване, актуализиране и изтриване. Накарайте го да извлече първичния ключ и NOTIFY widgets_changed, id . (Е, от PL/pgSQL вероятно бихте искали PERFORM pg_notify(...) .) PostgreSQL ще излъчи вашето известие, ако и когато тази транзакция се ангажира, правейки както известието, така и съответните промени в данните видими за други връзки.

В клиента бихте искали да стартирате нишка, посветена на поддържането на тази карта актуална. Ще се свърже с PostgreSQL, LISTEN widgets_changed за да започнете да поставяте известия в опашка, SELECT * FROM widgets за да попълните картата и изчакайте да пристигнат известия. (Проверката за известия очевидно включва запитване на JDBC драйвера , което е гадно, но не е толкова лошо, колкото си мислите. Вижте PgNotificationPoller за конкретно изпълнение.) След като видите известие, потърсете посочения запис и актуализирайте вашата карта. Имайте предвид, че е важно да LISTEN преди началния SELECT * , тъй като записите могат да се променят между SELECT * и LISTEN .

Този подход не изисква PostgreSQL да знае нищо за вашето приложение. Всичко, което трябва да направи, е да изпраща известия; вашето приложение ще свърши останалото. Няма скриптове на обвивката, няма HTTP и няма обратни извиквания, което ви позволява да преконфигурирате/преразпределите приложението си, без също така да се налага да преконфигурирате базата данни. Това е просто база данни и може да бъде архивирана, възстановена, репликирана и т.н. без допълнителни усложнения. По същия начин вашето приложение няма допълнителни сложности:всичко, от което се нуждае, е връзка с PostgreSQL, която вече имате.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Psycopg / Postgres :Връзките висят на случаен принцип

  2. Какъв е проблемът с изтриването на ред от базата данни?

  3. Изберете от нищо в Oracle, без да препращате към двойната таблица?

  4. Как да върна таблица по тип ред в PL/pgSQL

  5. Намиране на съседни многоъгълници - postgis заявка