2016-04-14 3 views
0

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 oder 1 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?

Antwort

0

Sie haben die in SQLites record format verwendeten internen Speichertypen korrekt abgeleitet.

Der beste Weg, um die Größe der Daten zu reduzieren, die über das Internet heruntergeladen werden, ist das Komprimieren der Datei.

+0

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. –

+0

@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. –