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

No Trackbacks

Comments

Display comments as Linear | Threaded

Jochen on :

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 on :

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

Add Comment

Standard emoticons like :-) and ;-) are converted to images.
E-Mail addresses will not be displayed and will only be used for E-Mail notifications.
To leave a comment you must approve it via e-mail, which will be sent to your address after submission.
BBCode format allowed
You can use [geshi lang=lang_name [,ln={y|n}]][/geshi] tags to embed source code snippets.
Form options
tweetbackcheck cronjob