Wie verkleinert man die SQLite-Datenbank?

Lesezeit: 4 Minuten

Nachdem ich alle meine Daten in SQLite gespeichert habe, erreichen sie bereits 14 MB. Aus diesem Grund befürchte ich, dass einige Leute meine Anwendung nicht aus dem Bereich mit langsamer Verbindung herunterladen können. Gibt es eine Möglichkeit, die SQLite-Datenbank zu verkleinern?

Benutzeravatar von Hot Licks
Heiße Lecks

Hast du es versucht VAKUUM?

Der VACUUM-Befehl baut die gesamte Datenbank neu auf. Es gibt mehrere Gründe, warum eine Anwendung dies tun könnte:

  • Sofern SQLite nicht im Modus „auto_vacuum=FULL“ ausgeführt wird, hinterlässt das Löschen einer großen Datenmenge aus der Datenbankdatei leeren Speicherplatz oder „freie“ Datenbankseiten. Dies bedeutet, dass die Datenbankdatei möglicherweise größer als unbedingt erforderlich ist. Wenn Sie VACUUM ausführen, um die Datenbank neu zu erstellen, wird dieser Speicherplatz zurückgewonnen und die Größe der Datenbankdatei verringert.
  • Häufige Einfügungen, Aktualisierungen und Löschungen können dazu führen, dass die Datenbankdatei fragmentiert wird, sodass Daten für eine einzelne Tabelle oder einen einzelnen Index in der Datenbankdatei verstreut sind. Durch die Ausführung von VACUUM wird sichergestellt, dass jede Tabelle und jeder Index weitgehend zusammenhängend in der Datenbankdatei gespeichert wird. In einigen Fällen kann VACUUM auch die Anzahl der teilweise gefüllten Seiten in der Datenbank reduzieren, wodurch die Größe der Datenbankdatei weiter reduziert wird …

Der VACUUM-Befehl kopiert den Inhalt der Datenbank in eine temporäre Datenbankdatei und überschreibt dann das Original mit dem Inhalt der temporären Datei. Beim Überschreiben des Originals wird ein Rollback-Journal bzw Write-Ahead-Protokoll Die WAL-Datei wird genauso verwendet wie für jede andere Datenbanktransaktion. Dies bedeutet, dass beim VACUUMEN einer Datenbank bis zu doppelt so viel freier Speicherplatz wie die ursprüngliche Datenbankdatei erforderlich ist …

  • Führen Sie Folgendes aus: sqlite3 /path/to/your/db/foo.db 'VACUUM;'

    – Tono Nam

    30. Juli 2019 um 8:43

  • Du kannst rennen VACUUM; direkt im Abfragefenster

    – IAmGroot

    6. Januar 2021 um 8:10 Uhr

ein paar Hinweise:

  • SQLite ist etwas faul, ungenutzten Speicherplatz zurückzugewinnen; Benutze die VAKUUM Befehl bzw automatischer Vakuummodus.

  • Das Datenbankformat tauscht Platzeffizienz gegen schnellen Zugriff ein. Wenn Sie nur den Dateninhalt sichern, entweder als SQL-Dump oder einfach als CVS-Datei für jede Datenbanktabelle, erhalten Sie wahrscheinlich kleinere Dateien.

  • Versuchen Sie, entweder Datenbankdateien oder einfache Daten zu komprimieren.

Den Kommentar von @Tono Nam in eine Antwort einfügen. Ein Beispiel mit vollständiger Syntax ist immer sehr hilfreich.

Führen Sie Folgendes in der Befehlszeile aus, um das zu verwenden vacuum Befehl:

sqlite3 /path/to/your/db/foo.db 'VACUUM;'

14 MB sind für eine Android-App dennoch sehr groß, es ist besser, wenn Sie dafür sorgen können, dass sie von einem Server heruntergeladen und in die App integriert wird.

Stattdessen können Sie die App mit der komprimierten Datenbankdatei (z. B. einer ZIP-Datei) bündeln und sie bei der ersten Ausführung der App dekomprimieren (denken Sie daran, die ZIP-Datei zu löschen). Am besten machst du das alles auf einer SD-Karte.

Versuchen Sie, es zu komprimieren und den Zipinput-Stream zu verwenden, während Sie Ihre Datenbank aus den Assets entpacken. Wie auch immer, Android komprimiert Ihre 14-MB-Datenbank ohnehin, wenn Sie Ihre APK erstellen (die während der Installation entpackt wird), also schätze ich, dass Ihre APK etwa 5-6 MB groß sein wird.

  • Android wird beim Erstellen/Exportieren einer APK-Datei automatisch komprimiert?

    – PPShein

    7. Okt. 2011 um 7:23

  • Ja, das tut es. Meine App hatte eine 12 MB große Datenbank an Assets. Beim Erstellen einer APK betrug die Dateigröße apj=k nur 4 MB. Ich denke, ich kann es sogar noch weiter reduzieren, wenn ich ZIP-Dateien in Assets verwende.

    – rDroid

    11. Okt. 2011 um 4:22

  • Wie PPShein erwähnt hat, wird Android die Datenbank komprimieren, aber Sie können 7zip verwenden. Dann entpacken Sie es mit dieser Bibliothek: github.com/hzy3774/AndroidUn7zip

    – Hadi Ahmadi

    28. November 2019 um 11:49 Uhr

Ich hatte eine Erfahrung mit SQLite, bei der ich etwa 3 MB Daten importierte, woraufhin mir klar wurde, dass die Daten Probleme mit der Kodierung hatten. Ich habe die Tabelle gelöscht, neu erstellt und die Daten erneut importiert, nachdem ich die Kodierungsprobleme behoben hatte. Ergebnis: eine 6 MB große SQLite-Datei. Meine Lösung bestand darin, die SQLite-Datenbank zu löschen und einfach eine neue zu erstellen. (Ohne weitere Details darüber, was Sie in Ihrer Datenbank speichern, ist dies alles, was ich anbieten kann …)

  • Android wird beim Erstellen/Exportieren einer APK-Datei automatisch komprimiert?

    – PPShein

    7. Okt. 2011 um 7:23

  • Ja, das tut es. Meine App hatte eine 12 MB große Datenbank an Assets. Beim Erstellen einer APK betrug die Dateigröße apj=k nur 4 MB. Ich denke, ich kann es sogar noch weiter reduzieren, wenn ich ZIP-Dateien in Assets verwende.

    – rDroid

    11. Okt. 2011 um 4:22

  • Wie PPShein erwähnt hat, wird Android die Datenbank komprimieren, aber Sie können 7zip verwenden. Dann entpacken Sie es mit dieser Bibliothek: github.com/hzy3774/AndroidUn7zip

    – Hadi Ahmadi

    28. November 2019 um 11:49 Uhr

Benutzeravatar von live-love
Lebe-Liebe

14 MB sind heutzutage für eine App nicht mehr so ​​groß. Sie können auch versuchen, unnötige Tabellenindizes zu entfernen. Einige Indizes lauern möglicherweise in Ihren Tabellen und können viel Platz beanspruchen. Möglicherweise müssen Sie Ihre Abfragen anders durchführen.

  • Oder Sie können sie beim ersten Anwendungsstart rekonstruieren.

    – xryl669

    2. April 2015 um 10:09

1451550cookie-checkWie verkleinert man die SQLite-Datenbank?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy