- Eine Erklärung für eine schnellere Methode, SQLite-Datenbanken zwischen Computern zu kopieren
- Indizes der Datenbank sind der Hauptgrund dafür, dass das Kopieren langsamer wird
- Mit dem SQLite-Befehl
.dump kann die Datenbank in eine Textdatei exportiert werden
- Die Textdatei ist kleiner als die ursprüngliche Datenbank und wird durch Komprimierung noch kleiner
- Mit dieser Methode lassen sich große Datenbanken schneller und zuverlässiger kopieren
Wie man SQLite-Datenbanken schneller zwischen Computern kopiert
- Eine Erklärung, wie man eine auf einem Remote-Server gespeicherte SQLite-Datenbank auf einen lokalen Computer kopiert
- In frühen Projektphasen lässt sie sich einfach mit dem Befehl
rsync kopieren
- Wenn die Datenbank wächst, wird das Kopieren langsamer und weniger zuverlässig
Einen Datenbank-Dump als Textdatei erstellen
- SQLite kann mit dem Befehl
.dump eine Datenbank in eine Textdatei exportieren
- Diese Textdatei besteht aus SQL-Anweisungen und kann kleiner sein als die ursprüngliche Datenbank
- Indizes werden in der Textdatei auf einzelne Zeilen reduziert, wodurch Speicherplatz gespart werden kann
Speicherplatz durch Komprimierung sparen
- Die Textdatei wird durch Komprimierung noch kleiner
- Zum Beispiel wird aus einer ursprünglichen SQLite-Datenbank von 3,4 GB eine mit gzip komprimierte Textdatei von 240 MB
- Wenn man die komprimierte Textdatei herunterlädt, geht das Kopieren der Datenbank deutlich schneller
Neuer ssh+rsync-Befehl
- Auf dem Server wird eine mit gzip komprimierte Textdatei erzeugt, auf den lokalen Computer kopiert und anschließend die Datenbank wiederhergestellt
- Erzeugen der komprimierten Textdatei auf dem Server:
ssh username@server "sqlite3 my_remote_database.db .dump | gzip -c > my_remote_database.db.txt.gz"
- Kopieren der Datei auf den lokalen Computer:
rsync --progress username@server:my_remote_database.db.txt.gz my_local_database.db.txt.gz
- Danach entpacken, die Datenbank wiederherstellen und die lokale Datei löschen
Datenbank-Dumps sind eine stabile Quelle zum Kopieren
- Wenn während des Kopierens Aktualisierungen stattfinden, kann
rsync eine fehlerhafte Datenbankdatei erzeugen
- Durch das Erstellen eines Text-Dumps wird dieses Problem gelöst, weil damit eine stabile Quelle zum Kopieren bereitsteht
- Diese Methode spart bei großen Datenbanken Zeit und macht Downloads schneller und zuverlässiger
1 Kommentare
Hacker-News-Kommentare
rsyncist schneller, aber ich stimme nicht der Behauptung zu, dass das Senden von SQL-Anweisungen schneller sei als das Senden der Datenbank. Man muss die SQL-Anweisungen ausführen sowie Optimierungs- und Vacuum-Arbeiten durchführensqlite_rsyncverwendet eine Version desrsync-Algorithmus, die für die interne Struktur von SQLite-Datenbanken optimiert ist. Es vergleicht interne Datenseiten effizient und synchronisiert nur geänderte oder fehlende SeitenVACUUM INTOverwendet werdenVACUUM-Befehl ist eine Alternative zur Backup-API; die resultierende Backup-Datenbank hat eine minimale Größe, wodurch Dateisystem-I/O reduziert wirdrsyncbereitgestellte Komprimierungsfunktion nicht verwendet wurde. Eine Komprimierung mitgzipvor der Übertragung könnte schneller sein--rsyncablevongzipkann weiter optimiert werden. Sie reduziert die Komprimierung leicht, lokalisiert aber Unterschiede, sodass nicht die gesamte komprimierte Ausgabe beeinflusst wirdrsyncdie Unterschiede zwischen dem vorherigen unkomprimierten Dump und dem aktuellen Dump berechnen lassen; anschließend kannrsyncdas über das Netzwerk gesendete Changeset komprimierenudpcastverwendet, um das Backup auf einmal an alle Ziele zu senden