Skip to content

SQLite Zugriff von extern

SQLite ist eine hübsche kleine Datenbank mit vielen Möglichkeiten. Allerdings kennt sie keinen Client/Server Betrieb, so dass man nur lokal direkt auf die Daten zugreifen kann. Ich habe aktuell die Herausforderung, dass ich auf eine SQLite Datenbank über das Netz zugreifen muss, da ich mit den Daten quasi in Echtzeit auf einem anderen Rechner weiterverarbeite. 

Konkret geht es um eine SQLite Datenbank auf einer Asterisk Telefonanlage, in der ich die Call Detail Records (CDR) abgreifern kann. Leider ist der Asterisk geschlossen und Module, die es mir leichter machen würden, die Daten gleich in eine externe Datenbank zu schreiben sind nicht vorhanden. Also brauche ich wohl oder übel die Trickkiste.

An welche Möglichkeiten habe ich schon gedacht?

  • SQLite Datenbank (ca. 2MB) regelmäßig per rsync kopieren. Ist dann eben nicht in Echtzeit.
  • Abfrage der Daten via ssh und sqlite Client auf der Telefonanlage. Ich bekomme dann aber nicht das benötigte Format oder ich bekomme zu viele Daten (Dump der kompletten DB) und es ist nicht in Echtzeit.
  • Via sshfs das Verzeichnis auf dem externen Host einmounten und direkt auf die Datenbank zugreifen. Funktioniert sehr gut, bis auf das der Mount gelegentlich verschwindet. Eventuell kann ich das aber noch lösen. 

Hat jemand noch weitere Ideen? Ich kann den SQLite auf der Telefonanlage nicht ersetzen und leider auch keine eigenen Module einbringen. Die schönen Module fehlen leider.

Trackbacks

Keine Trackbacks

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

Jochen am :

Kannst du auf der Asterisk-Maschine Code ausfuehren? Falls ja ist perl mit DBI::Gofer eine simple Moeglichkeit. Du brauchst Perl, DBI und das SQLite-Modul.

Auf dem Server startest du einfach einen Gofer-Proxy:
perl -MDBI::Gofer::Transport::stream -e run_stdio_hex

Und auf dem Client setzt du einfach eine Umgebungsvariable und tust im Rest des Perl-Codes einfach so, als waere die Datenbank lokal.

export DBI_AUTOPROXY='dbi:Gofer:transport=stream;url=ssh:user@host'

#!/usr/bin/perl -w
use DBI;

my $dbfile = 'test.sqlite'; -- liegt auf dem Server
my $dbh = DBI->connect("dbi:SQLite:dbname=$dbfile","","");
my $sth = $dbh->prepare("SELECT * FROM t1") || die("could not prepare: $@\n");
$sth->execute || die("could not execute: $@ \n");
while(my $row = $sth->fetch) {
print join("|", @$row), "\n";
}

Marco am :

Grundsätzlich kann ich dort zwar Code ausführen, aber nicht installieren, wenn er nicht schon vorhanden ist.

Kommentar schreiben

Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.
Um einen Kommentar hinterlassen zu können, erhalten Sie nach dem Kommentieren eine E-Mail mit Aktivierungslink an ihre angegebene Adresse.
BBCode-Formatierung erlaubt
Sie können [geshi lang=LANG][/lang] Tags verwenden um Quellcode abhängig von der gewählten Programmiersprache einzubinden
Formular-Optionen
tweetbackcheck cronjob