MySQL - SMS - Alerts - Benachrichtigungen

Matayus

Aktiver Benutzer
Beiträge
25
Moin Leute,

ich hab da mal eine Frage und die SuFu hat mir leider nicht geholfen.

Und zwar baue ich mir grade eine Schnittstelle wo ich API Daten in eine Datenbank (MySQL) speichere.

Diese Daten, möchte ich per View auf bestimmte Signale abfragen (per Task jede minute).
Wenn ein bestimmter Wert getroffen wird, möchte ich per SMS (falls hier ein Crack ist sogar Telegram) eine benachrichtigung bekommen.

Beispiel zur Sicht: Die Sicht schaut, ob ein bestimmter Wert über 5% liegt... liegt dieser Wert über 5% dann möchte ich gern eine benachrichtgung haben. Wenn der Wert nicht erreicht wird passiert halt nix und der Task läuft nächste minute erneut. Naja der task läuft immer :)

Ich hoffe ich konnte mein Anliegen gut erläutern. Ich hoffe jemand kann mir hier weiterhelfen :)

Schöne Grüße, Mata
 
Werbung:
Die typische Realisierung arbeitet so, daß da eine Queue-Table gefüllt wird, wenn es in der DB bestimmte Ereignisse gibt. Diese können z.B. via TRIGGER ausgelöst werden.
Ein externer Prozess pickt sich daraus einen Datensatz und führt die Aktion aus. Damit man nicht pollen muß, haben manche DB-Systeme einen Mechanismus namens "Listen & Notify", den man dafür nutzen kann.
 
ahhh OK hab ich so nicht gewusst. Vielen Dank für die Antwort.
In meiner DB wird ansich nur die Daten gesammelt.

Müsste ich dann die Ergebnisse meiner VIEW quasi nochmal in eine Tabelle schreiben damit ein Trigger die funktion auslöst ?
Oder wie wird die Queue Tabelle gefüllt ?

Nur damit ich das ganze verstehe :)
 
um es mal ganz simpel zu zeigen. wenn Werte > 50 eingetragen werden soll der TRIGGER feuern und eine Zeile in der queue-Tabelle schreiben:

Code:
test=# create table werte (id serial primary key, val int);
CREATE TABLE
test=*# create table queue(id serial primary key, info text);
CREATE TABLE
test=*# create or replace function wert_ueber_50() returns trigger as $$ begin insert into queue values (new.id, 'Neuer Wert: ' || new.val::text); return new; end;$$language plpgsql;
CREATE FUNCTION
test=*# create trigger trg1 before insert on werte for each row when (new.val > 50) execute procedure wert_ueber_50();
CREATE TRIGGER
test=*# insert into werte (val) values (10);
INSERT 0 1
test=*# insert into werte (val) values (20);
INSERT 0 1
test=*# insert into werte (val) values (70);
INSERT 0 1
test=*# select * from werte;
 id | val
----+-----
  1 |  10
  2 |  20
  3 |  70
(3 Zeilen)

test=*# select * from queue;
 id |      info     
----+----------------
  3 | Neuer Wert: 70
(1 Zeile)

test=*#
[/quote]

nicht blind abtippen, ist PostgreSQL.
 
Ahhhh super !!! Also hab ich das doch richtig verstanden :)

Und nun wäre es doch möglich (wie in Deinem Beispiel) wenn der Wert >50 wäre, nun eine Funktion oder eine Applikation mir eine benachrichtung schickt ?
 
Ja, sicher. Bedenke aber folgendes: Datenbanken arbeiten transaktionsbasiert. Das Eintragen in der queue-Tabelle erfolgt innerhalb einer Transaktion, diese könnte auch noch scheitern, dann würde ein ROLLBACK erfolgen. Dumm, wenn Du bereits eine eMail verschickt hast, ein ROLLBACK wird diese nicht wieder zurückholen.

Also benötigst Du eine Applikation, die auf neue Einträge in der queue-Tabelle reagiert. Entweder schaut sie doof aller 1 Millisekunde nach, oder aber sie verbindet sich zur DB und sagt: "Hey, wenn sich da was tut, schicke mir eine Notification!".

PostgreSQL: Documentation: 10: LISTEN
PostgreSQL: Documentation: 10: NOTIFY
 
Werbung:
Zurück
Oben