Welke andere oplossing heb ik voor dit probleem?
Gebruik LISTEN
en NOTIFY
om uw app te vertellen dat er dingen zijn veranderd.
U kunt de NOTIFY
van een trigger die ook wijzigingen registreert in een wachtrijtabel.
Je hebt een PgJDBC-verbinding nodig die een LISTEN
. heeft verzonden voor de gebeurtenis(sen) die u gebruikt. Het moet de database pollen door periodieke lege query's te verzenden (""
) als u SSL gebruikt; als u geen SSL gebruikt, kan dit worden voorkomen door gebruik te maken van de asynchrone meldingscontroles. U moet de Connection
uitpakken object uit uw verbindingspool om de onderliggende verbinding te kunnen casten naar een PgConnection
om mee te luisteren/melden. Zie gerelateerd antwoord
De producent/consument-bit zal moeilijker zijn. Om meerdere crashveilige gelijktijdige consumenten in PostgreSQL te hebben, moet u adviserende vergrendeling gebruiken met pg_try_advisory_lock(...)
. Als u geen gelijktijdige consumenten nodig heeft, is het eenvoudig, u SELECT ... LIMIT 1 FOR UPDATE
een rij tegelijk.
Hopelijk bevat 9.4 een eenvoudigere methode om vergrendelde rijen over te slaan met FOR UPDATE
, want er is werk aan de winkel.