PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Wyzwalacz Postgres do aktualizacji pamięci podręcznej Java

Nie mogę rozmawiać z MyBatis, ale mogę powiedzieć, że PostgreSQL ma wbudowany system publikowania/subskrypcji, który pozwala na zrobienie tego przy znacznie mniejszej ilości hackerów.

Najpierw skonfiguruj wyzwalacz dla widgets który działa przy każdej operacji wstawiania, aktualizowania i usuwania. Poproś go o wyodrębnienie klucza podstawowego i NOTIFY widgets_changed, id . (Cóż, z PL/pgSQL prawdopodobnie chciałbyś PERFORM pg_notify(...) .) PostgreSQL wyśle ​​twoje powiadomienie, jeśli i kiedy transakcja zostanie zatwierdzona, dzięki czemu zarówno powiadomienie, jak i odpowiednie zmiany danych będą widoczne dla innych połączeń.

W kliencie chciałbyś uruchomić wątek poświęcony aktualizowaniu tej mapy. Połączyłby się z PostgreSQL, LISTEN widgets_changed aby rozpocząć kolejkowanie powiadomień, SELECT * FROM widgets aby wypełnić mapę i poczekać na przybycie powiadomień. (Sprawdzanie powiadomień najwyraźniej wymaga odpytywania sterownika JDBC , co jest do bani, ale nie tak złe, jak mogłoby się wydawać. Zobacz PgNotificationPoller dla konkretnego wdrożenia.) Gdy zobaczysz powiadomienie, wyszukaj wskazany rekord i zaktualizuj swoją mapę. Pamiętaj, że ważne jest, aby LISTEN przed początkowym SELECT * , ponieważ rekordy można zmieniać między SELECT * i LISTEN .

Takie podejście nie wymaga, aby PostgreSQL wiedział cokolwiek o Twojej aplikacji. Wystarczy, że wyślesz powiadomienia; Twoja aplikacja zajmie się resztą. Nie ma skryptów powłoki, HTTP ani wywołań zwrotnych, co pozwala na rekonfigurację/ponowne wdrożenie aplikacji bez konieczności ponownego konfigurowania bazy danych. To tylko baza danych, którą można tworzyć, przywracać, replikować itp. bez dodatkowych komplikacji. Podobnie Twoja aplikacja nie ma żadnych dodatkowych złożoności:wszystko, czego potrzebuje, to połączenie z PostgreSQL, które już masz.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Metapolecenia w Psycopg2 - \d nie działa

  2. PostgreSQL:Szyfruj kolumnę za pomocą pgcrypto

  3. Jak mogę zaimportować dane z ASCII (ISO/IEC 8859-1) do mojej bazy danych Rails/PGSQL?

  4. SQLAlchemia czy psycopg2?

  5. Migracja Railsów:Bigint na PostgreSQL wydaje się zawodzić?