Das tolle an SQLite ist, dass es eine Datenbank in einer Datei ist. Das hat viele Vorteile: Einfache Installation, einfache Konfiguration, einfache Backups. Und die Performance ist trotzdem nicht schlecht. Es hat aber auch einen Nachteil: Wie soll man Daten synchronisieren?
Also, ein Beispiel: Eine Webapp auf dem Produktivsystem aktualisiert die Datenbank mit neuen Produktpreisen, und hat dafür eine eigene Tabelle offers
. Gleichzeitig wird auf dem Entwicklungssystem die Tabelle products
angepasst, also welche Produkte die Webapp überhaupt kennt. Jetzt sollen gleichzeitig die Preise aktuell gehalten und irgendwie die neue Produkt-Tabelle ins Produktivsystem geschoben werden.
In einem solchen Szenario kann man die Datenbank aufteilen. Die aktuellen Preise bleiben in einer Datei namens offers.db, die Produkte landen in products.db. SQLite kann die dann mit ATTACH
zusammenfügen.
$ sqlite3 products.db
SQLite version 3.17.0 2017-02-13 16:02:40
Enter ".help" for usage hints.
sqlite> ATTACH DATABASE 'offers.db' as odb;
Danach können die Tabellen in offers.db ganz normal in SQL-Abfragen benutzt werden. Bei Kollisionen hilft das Namenspräfix. Sogar neue Tabellen können damit zielgerichtet in dieser Datei erstellt werden:
CREATE TABLE odb.sales(link TEXT, price REAL);
Mit dieser Funktion kann man wunderbar die Daten in permanente und regelmäßig aktualisierte aufteilen, sodass das Überschreiben der ersten nicht die Aktualisierungen der anderen verlorengehen lässt.