2009-11-26 6 views
11

Ich entwickle eine Anwendung, die regelmäßig Informationen an einen externen Server sendet. Ich erstelle eine lokale Kopie der gesendeten Daten für Sicherungszwecke.Android-Datenspeicher - Datei vs SQLite

Was ist die beste Option zum Speichern der Daten in Bezug auf die Akkulaufzeit? Jede Datenübermittlung ist ein serialisiertes Objekt (die Klasse hat 5 Felder, einschließlich eines Datums, Zahlen und Strings) von etwa 5K-10K.

Irgendeine andere Idee?

Antwort

13

Ich habe keine Ahnung in Bezug auf die Lebensdauer der Batterie direkt, aber ein Kriterium wäre, die einfacher zu verwalten ist? Weniger Operationen zum Verwalten der Daten würden weniger CPU-Zyklen und somit eine längere Batterielebensdauer bedeuten.

Ich würde sagen, die SQLite-Option ist einfacher. Sie können eine Datumsspalte in die SQLite-Tabelle einfügen, in der Ihre Daten gespeichert sind. Dadurch können Sie alte Übermittlungen, die Sie nicht mehr benötigen, ganz einfach entfernen - und das alles über die native SQL-Bibliothek. Das Verwalten einer ganzen Dateimenge - oder schlimmer noch einer einzelnen Datei - mit Ihrem eigenen Java-Code wäre viel mehr Arbeit.

Darüber hinaus können Sie Daten in die Datenbank schreiben und vergessen Sie es einfach, bis Sie es erneut lesen müssen. Wenn Sie Daten in Dateien speichern, müssen Sie herausfinden, wann Sie Dateien lesen und schreiben sollten, und zwar unter der Nummer Android application life cycle. Wenn Sie sich Sorgen um den Akku machen, sollten Sie die Dateien wahrscheinlich nicht öfter schreiben, als Sie sollten, und die Daten im Speicher zwischenspeichern. Sie müssen jedoch sicherstellen, dass Sie keine Daten verlieren, wenn Ihre App angehalten oder zerstört wird . Meiner Meinung nach ist es viel einfacher, eine SQLite-Datenbank zu verwenden und sich nicht darum zu kümmern.

+0

Vielen Dank für Ihre Kommentare, scheinen sehr vernünftig. Wissen Sie, ob die Datenbank immer im Hintergrund läuft (als traditionelle Datenbank) oder wenn sie nur ausgeführt wird, wenn eine Anwendung sie verwendet? Ich meine, wenn der "SQLite-Server" (wenn ein solcher Prozess in Android existiert) nur wegen meiner Anwendung gestartet wird ... vielleicht ist es keine gute Idee. –

+10

afaik sqlite ist nur eine Datei, auf die Sie über Bibliotheken zugreifen. Es wird kein Datenbankserver ausgeführt. – tosh

15

Ich glaube nicht, dass es wichtig ist, ob Sie SQLite oder eine Datei verwenden, da die SQLite-Datenbank einfach eine Datei auf dem System ist (gespeichert in /data/data/<your_package>/databases/). Sie müssen sich zur richtigen Zeit an die Datenbank binden, genau so viel, wie Sie eine Datei zur richtigen Zeit auf der Festplatte speichern müssen. Mit anderen Worten, auf die eine oder andere Weise können Sie genauso viele Festplattenschreibvorgänge verwenden.

Ich denke, dass das, was Sie wählen, hängt mehr davon ab, welche Art von Daten Sie speichern. Wenn Sie die Befugnisse benötigen, die eine Datenbank liefern kann (z. B. Abfragen), dann verwenden Sie unbedingt SQLite. Wenn Sie jedoch keine db benötigen oder Daten sehr unterschiedlich sind (und nicht einfach in einer relationalen Datenbank eingerichtet werden können), würde ich mit Dateien arbeiten.

Was ich Ihnen sicher sagen kann ist, dass Sie nicht Serialisierung verwenden sollten, um eine Datei zu speichern, wenn das die Route ist, die Sie wählen, um zu gehen. Android Serialisierung ist langsam, langsam, langsam und erstellt große Dateien. Es ist viel besser, aus Performancegründen entweder ein eigenes XML- oder JSON-Format zu schreiben.

4

Ist Ihre Anwendung multi-threaded? Wenn Sie mehrere Threads auf den Datenspeicher zugreifen, würde ich mit SQLite gehen. Sorgen Sie dafür, dass SQLite Probleme mit Sperren hat.

+0

Warnung, SQLite ist auf einigen Plattformen nicht threadsicher (Xamarin) – nVentimiglia