Hallo zusammen,
GET_LOCK() ist in der MySQL-/MariaDB-Welt eine elegante Methode, um via Cron gestartete Laufzeiten daran zu hindern, parallel die gleiche Arbeit zu machen. Beispielsweise, wenn man Prozesse hat, die nicht gleichzeitig laufen dürfen, wie beispielsweise Abruf und Persistierung von Amazonbestellungen seit dem letzten Durchgang/Abruf. Die via GET_LOCK() erstellten Locks werden bei Session-Ende, bzw. Verbindungsabbruch automatisch freigegeben.
File-Locking fällt raus, weil diese Prozesse auf mehreren Rechnern gestartet werden können und Redis scheidet aus, weil eine Verbindung zu Redis abreißen könnte, während die Verbindung zu MySQL/MariaDB noch steht.
Bei Postgres gibt es Advisory Locks, die als Namen allerdings keinen String, sondern eine Nummer bekommen. Das ist insofern blöd, als dass man eine Liste führen müsste, welche Applikationen welche Nummern belegen. Da wirkt die GET_LOCK()-Lösung deutlich pragmatischer.
Gibt es etwas Besseres als diese Advisory Locks, oder ist das an dieser Stelle das Beste, was Postgres kann?
GET_LOCK() ist in der MySQL-/MariaDB-Welt eine elegante Methode, um via Cron gestartete Laufzeiten daran zu hindern, parallel die gleiche Arbeit zu machen. Beispielsweise, wenn man Prozesse hat, die nicht gleichzeitig laufen dürfen, wie beispielsweise Abruf und Persistierung von Amazonbestellungen seit dem letzten Durchgang/Abruf. Die via GET_LOCK() erstellten Locks werden bei Session-Ende, bzw. Verbindungsabbruch automatisch freigegeben.
File-Locking fällt raus, weil diese Prozesse auf mehreren Rechnern gestartet werden können und Redis scheidet aus, weil eine Verbindung zu Redis abreißen könnte, während die Verbindung zu MySQL/MariaDB noch steht.
Bei Postgres gibt es Advisory Locks, die als Namen allerdings keinen String, sondern eine Nummer bekommen. Das ist insofern blöd, als dass man eine Liste führen müsste, welche Applikationen welche Nummern belegen. Da wirkt die GET_LOCK()-Lösung deutlich pragmatischer.
Gibt es etwas Besseres als diese Advisory Locks, oder ist das an dieser Stelle das Beste, was Postgres kann?