Die Asterisk-Datenbank
Asterisk bringt eine eingebaute Key-Value-Datenbank mit, die
AstDB. Historisch basierte sie auf Berkeley DB; seit Asterisk 11
nutzt sie SQLite3 und speichert die Daten typischerweise unter
/var/lib/asterisk/astdb.sqlite3. Das Daten-Modell ist unverändert:
Jeder Eintrag besteht aus einer family (Gruppe), einem key und
einem value.
|
Für komplexe Daten (User-Profile, Queue-Zustände, Realtime-Konfiguration) ist AstDB nicht das richtige Werkzeug. Dann lohnt sich ein Blick auf ARA (Asterisk RealTime Architecture) mit einer externen Datenbank wie PostgreSQL oder MySQL. AstDB ist für kleine, schnelle Key-Value-Aufgaben da: Call-Forwarding-Ziele, kleine Zähler, einfache Feature-Flags, Session-Merker. |
Auf AstDB greifen Sie mit der Funktion DB() zu — sowohl lesend als
auch schreibend.
Werte in die Datenbank schreiben
Die Funktion DB() kann innerhalb der Applikation
Set() aufgerufen werden. Soll in der Family
obst der Eintrag apfel den Wert
20 bekommen, so geschieht das mit folgendem
Aufruf:
exten => 1234,1,Set(DB(obst/apfel)=20)
Werte aus der Datenbank lesen
Die Werte in der Datenbank können mit der Funktion
DB() in der Form $\{DB(family/key)} abgerufen
werden. Um den Inhalt des Eintrags apfel in der Family
obst auf dem Command Line Interface auszugeben, kann man
folgenden Aufruf ausführen:
exten => 1234,1,NoOp(obst/apfel hat den Wert ${DB(obst/apfel)})
Soll der Inhalt dieses Datenbankfeldes in der Variablen
apfelmenge gespeichert werden, so kann dies mit
Set() erfolgen:
exten => 1234,1,Set(apfelmenge=${DB(obst/apfel)})
Werte aus der Datenbank löschen
Einzelne Einträge werden über die Funktion DB_DELETE()
gelöscht, ganze Familien über die Applikation DBdeltree().
|
Die frühere Applikation |
DB_DELETE()
DB_DELETE(family/key) liest den aktuellen Wert und löscht den
Eintrag in einem Schritt. Der Rückgabewert lässt sich einfach mit
NoOp() verwerfen, wenn er nicht gebraucht wird:
exten => 1234,1,NoOp(${DB_DELETE(obst/apfel)})
Oder man fängt den gelöschten Wert in einer Variablen auf:
exten => 1234,1,Set(ALTER_WERT=${DB_DELETE(obst/apfel)})
same => n,NoOp(Geloescht wurde: ${ALTER_WERT})