Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

Was fehlt?

Es liegt in der Natur der Sache: Ein Wiki ist niemals fertig. Wir geben uns große Mühe, mit der Entwicklung Schritt zu halten; lassen Supportanfragen direkt in neue Artikel einfließen … aber auch wir sind nicht perfekt. Wenn du hier nicht fündig wirst: Nicht schmollen - Bescheid sagen! Unter hallo@uberspace.de steht dir unser Team gerne bereit. Hand drauf!

database:sqlite

SQLite ist eine freie „Mini-SQL-Datenbank“, die im Gegensatz zu MySQL oder PostgreSQL keinen laufenden Dienst benötigt.

Einsatzbereich

Klassische DBMS (Database Management Services) kommunizieren über Sockets oder IP mit Anwendungen und koordinieren deren Zugriffe auf die Datenbanken. Bei SQLite greifen Anwendungen direkt auf die Dateien mit den Datenbanken zu. Daher kann immer nur ein Prozess gleichzeitig die selben Datenbanken verwenden. In manchen Fällen ist das eine Skalierungsgrenze, die nur durch den Einsatz eines DBMS überwunden werden kann. Häufig gibt es jedoch nur einen einzigen Prozess, der eine Datenbank benötigt; hier ist SQLite simpel zu konfigurieren und unter Umständen sogar performanter, weil der zusätzliche Aufwand eines DBMS entfällt.

Faustregel: SQLite reicht so lange, wie nicht mehrere User gleichzeitig mit dem Backend der Anwendung interagieren sollen.

Mehr Informationen dazu gibt es in dem Artikel Appropriate Uses For SQLite

Ausprobieren

SQLite arbeitet unmittelbar auf Dateien, daher entfällt die Vergabe von Username/Passwort: Alle SQLite-Datenbankdateien, auf denen du Lese- und/oder Schreibrechte hast, können entsprechend dieser Rechte benutzt werden.

Für die Adminstration steht das das Programm sqlite3 zur Verfügung, mit dem auf der Shell Datenbanken bearbeitet werden können. Zum Anlegen einer Datenbank kann es einfach mit dem Namen einer noch nicht vorhandenen Datei aufgerufen werden:

[hermine@lyra ~]$ sqlite3 $HOME/meine-datenbank.db
sqlite> create table person (id integer primary key autoincrement, first_name text, last_name text, signup_at date);
sqlite> insert into person(first_name, last_name, signup_at) values('Hermine', 'Granger', date('now'));
sqlite> insert into person(first_name, last_name, signup_at) values('Ron', 'Weasley', date('now'));
sqlite> select * from person;
1|Hermine|Granger|2015-05-05
2|Ron|Weasley|2015-05-05
sqlite> .quit

Hier kann man sehen, dass SQLite eine Funktionen aufweist, um eine ID-Nummer automatisch zu vergeben und das heutige Datum einzusetzen. Diese und viele Funktionen mehr, die von den großen DBMS bekannt sind, werden ausführlich unter SQL As Understood By SQLite in der Dokumentation des Projekts beschrieben. Auch wenn du bereits erfahrener User von beispielsweise MySQL bist, empfehlen wir dir einen Blick hinein, denn auch SQLite hat seine Eigenheiten.

Entwicklung

  • Unsere Perl-Installation haben wir um das Modul DBD::SQLite erweitert.
  • Unsere PHP-Installation ist mit SQLite3-Support kompiliert. Dokumentation findest du auf der PHP-Website.
  • Unsere Python-Installation haben wir mit dem Modul python-sqlite erweitert, die Unterstützung für die DB-API Spec v2 bietet.

Backup

Damit die Datenbank ordentlich gesichert wird, solltest du regelmäßig einen Dump anlegen lassen. Denn falls in dem Augenblick, in dem die Datenbank gerade unter Bearbeitung steht, unser Backup-System vorbeikommt, dann sichert dieses unter Umständen keine konsistente Kopie. Das bedeutet, dass Anfragen möglicherweise nur teilweise verarbeitet wurden und die Kopie weder den Zustand vor der jeweiligen Anfrage, noch den danach abbildet. Viele Szenarien dazu werden in der Dokumentation unter How To Corrupt An SQLite Database File beschrieben.

Der Datenbank-Dump enthält im Gegensatz zur Datenbank selbst die Inhalte in Form von SQL-Statements. Mittels dieser kann die Datenbank genau so wieder eingespielt werden, als geschiehe dies von Hand, also durch das Eingeben von Anfragen. Daher wird hier ebenso das Programm sqlite3 verwendet.

Einen Dump anlegen:

[hermine@lyra ~]$ echo .dump | sqlite3 meine-datenbank.db | gzip > meine-datenbank.sql.gz

Cronjob

Zum regelmäßigen Sichern der Datenbank lege einen Cronjob an:

0 * * * * echo .dump | sqlite3 $HOME/meine-datenbank.db | gzip > $HOME/meine-datenbank.sql.gz    

Restore

Die Wiederherstellung geht ganz einfach. So kann man die Daten anhand des Dumps wieder zurückspielen:

[hermine@lyra ~]$ zcat meine-datenbank.sql.gz | sqlite3 meine-datenbank.db

Wenn die Datei bereits existiert, treten dann wahrscheinlich Konflikte auf. Um das zu vermeiden, benenne die aktuelle Datei um oder lösche sie!

database/sqlite.txt · Zuletzt geändert: 2015/05/05 14:38 von uber