Ich versuche, einige zusätzliche Größe aus einer SQLite-Datenbank zu entfernen, die ich von einem meiner WebServices auf eine iOS-App ziehe. Ich mache ein paar Tests, was Tische größer macht als sie sein müssen.SQLite INTEGER Optimierung
Ich habe eine Preistabelle, die etwa 223k Datensätze hat. Indem ich nur 2 REAL-Spalten in INTEGER * 100 umwandelte, gab ich bereits 34% auf die Größe meiner Tabelle in Kilobyte zurück. Was eigentlich schockierend war.
Da ich diesen absurden Unterschied bemerkte, überprüfte ich nur 1 Tabelle mit 1 Spalte vom Typ INTEGER mit den gleichen (223k) Datensätzen.
Also hier ist, was ich bemerkt (I VACUUM
nach jedem Test):
- Füllen alle Zeilen mit entweder
NULL
,0
oder1
Ergebnisse in einer Datei 1,9MB - Füllen alle Zeilen mit
100
Ergebnisse in eine 2,1MB Datei - alle Zeilen mit
1000
Filling -10000
Ergebnisse in einer Datei 2,4MB - alle Zeilen mitFillingErgebnisse in einer Datei 3,0MB
- Füllen alle Zeilen mit
10000000
Ergebnissen in einer Datei 3,1MB
Ich fühle mich wirklich wie es ein Overhead auf der Dynamik des INTEGER Feldtypen. Gibt es keinen günstigeren Weg, int
Werte in SQLite zu speichern oder ist dies das einzige Endspiel?
Ja, ich benutze bereits Gzip-Komprimierung, die ein großer Gewinn ist, aber ich bin nur sehr enttäuscht, solche großen Kilobytes über reine ganze Zahlen zu verlieren. Ich denke stark darüber nach, JSON zu verwenden, um dies zu umgehen. –
@Allendar JSON hat auch Ganzzahlen mit variabler Länge, da sie als Text gespeichert sind. Die ganzzahligen Ziffern für das Speichern von 223k '10000000's würden 1,7MB Speicherplatz benötigen. –