sql >> Databáze >  >> RDS >> PostgreSQL

Postgres spoušť pro aktualizaci mezipaměti Java

Nemohu mluvit s MyBatis, ale mohu vám říci, že PostgreSQL má zapečený systém publikování/odběru, který by vám to umožnil s mnohem menším množstvím hackerů.

Nejprve nastavte spouštěč pro widgets který běží při každé operaci vložení, aktualizace a odstranění. Nechejte extrahovat primární klíč a NOTIFY widgets_changed, id . (No, z PL/pgSQL byste pravděpodobně chtěli PERFORM pg_notify(...) .) PostgreSQL bude vysílat vaše oznámení, pokud a kdy dojde k potvrzení transakce, takže oznámení i odpovídající změny dat budou viditelné pro ostatní připojení.

V klientovi byste chtěli spustit vlákno věnované udržování této mapy aktuální. Připojilo by se k PostgreSQL, LISTEN widgets_changed chcete-li začít řadit oznámení do fronty, SELECT * FROM widgets vyplňte mapu a počkejte na doručení oznámení. (Kontrola oznámení zřejmě zahrnuje dotazování ovladače JDBC , což je na hovno, ale není to tak špatné, jak si možná myslíte. Viz PgNotificationPoller pro konkrétní implementaci.) Jakmile uvidíte upozornění, vyhledejte uvedený záznam a aktualizujte svou mapu. Pamatujte, že je důležité LISTEN před počáteční SELECT * , protože záznamy lze měnit mezi SELECT * a LISTEN .

Tento přístup nevyžaduje, aby PostgreSQL věděl něco o vaší aplikaci. Jediné, co musí udělat, je posílat upozornění; vaše aplikace udělá zbytek. Neexistují žádné skripty shellu, žádný HTTP a žádná zpětná volání, což vám umožňuje překonfigurovat/znovu nasadit vaši aplikaci, aniž byste museli překonfigurovat databázi. Je to jen databáze a lze ji zálohovat, obnovovat, replikovat atd. bez dalších komplikací. Podobně vaše aplikace nemá žádné extra složitosti:vše, co potřebuje, je připojení k PostgreSQL, které již máte.




  1. "aktivní" příznak nebo ne?

  2. Jak mohu přinutit hodnotu dotazu MySQL k použití konkrétního řazení?

  3. Mysql-php jak implementovat fond připojení s php v 5.2 a žádné trvalé připojení není povoleno

  4. Optimalizace dotazu – trvá příliš dlouho a zastaví server