SQLite ist ein leichtgewichtiges relationales Datenbanksystem, das
genial konzipiert, allerdings nicht netzwerkfähig ist. Letzteres ist laut
der Autoren Absicht: "SQLite is designed for situations where the
data and application coexist on the same machine."
Mitunter möchte man dennoch eine SQLite-Datenbank von einem entfernten
Rechner zugreifen. Dass es keine gute Idee ist, wie es im Netz öfter
als Lösung genannt wird, die Datenbankdatei (eine SQLite-Datenbank
besteht aus einer einzigen Datei) auf ein Netzwerk-Dateisystem zu legen,
wird von den Autoren in SQLite Over a Network, Caveats and Considerations dargelegt.
Unter Perl lässt sich der Netzwerk-Zugriff auch solide unter Rückgriff
auf DBI und dessen Proxy-Server realisieren. Der Unterschied
ist, dass in dem Fall die API Schicht ins Netz verlegt wird und
nicht die File-I/O Schicht (s. obiges Dokument).
Starten des Proxy-Servers auf dem Rechner mit der SQLite-Datenbank:
$ ssh USER@HOST "bash -lc 'dbiproxy --localport=PORT'"
Zugriff auf die Datenbank aus Perl heraus von einem beliebigen
Rechner aus:
use DBD::SQLite;
my $dbh = DBI->connect('dbi:Proxy:hostname=HOST;port=PORT;dsn=DSN',{
RaiseError => 1,
ShowErrorStatement => 1,
});
# ab hier können wir auf die SQLite-Datenbank zugreifen, als ob sie lokal wäre
Hierbei ist:
- HOST
-
Der Name des Rechners, auf dem die SQLite-Datenbank liegt.
- PORT
-
Der Port, auf dem der Proxy-Server läuft.
- DSN
-
Der DBI Data Source Name der SQLite-Datenbank. Dieser hat die
Form dbi:SQLite:dbname=PATH, wobei PATH der Pfad der
Datenbank-Datei auf dem entfernten Rechner ist.
Eine breitere Darstellung der Möglichkeiten des DBI Proxy-Servers
findet sich in Programming the Perl DBI - Database Proxying.
Warnung: Der DBI Proxy-Server hat offenbar ein Memory Leak und sollte
daher nicht unbegrenzt lange laufen.
Soll lediglich mit dem SQLite-Client auf eine entfernte Datenbank
zugegriffen werden, kann dies per ssh(1) erreicht werden:
$ ssh -t USER@HOST sqlite3 PATH