2012-04-13 3 views
1

Meine App muss Daten auf dem Telefon speichern, aber ich bin mir nicht sicher, was die effizientere Methode ist. Ich muss die Daten oder ähnliches nicht durchsuchen. Ich muss nur in der Lage sein, den aktuellen Zustand der App zu speichern, wenn sie geschlossen wird, und sie wiederherzustellen, wenn sie wieder verfügbar ist. Es gibt Daten zwischen 1 MB und 10 MB, die gespeichert werden müssen.Was ist die bessere Methode zum Speichern der Daten von Android-Apps - in SQLite oder im Dateisystem?

Es gibt im Grunde eine Reihe von benutzerdefinierten Klassen mit Daten in ihnen, und jetzt habe ich sie als Serializable, und speichern Sie einfach jede Klasse in eine Datei. Gibt es einen Grund für mich, dies zu ändern, um es in SQLite zu speichern?

Antwort

0

Wenn Sie sqlite verwenden, können Sie speichern, wie Sie gehen, und wissen, dass was in der Datenbank ist ziemlich aktuell, wenn die App/Aktivität, die die Daten hält, plötzlich von der os getötet wird. Andere, die ich nicht sehen kann und offensichtlicher Grund sqlite für Ihren Anwendungsfall zu verwenden. Auch für den SQL-Ansatz haben Sie eine klare Möglichkeit, die Struktur Ihrer Domänenobjekte zu einem späteren Zeitpunkt zu ändern und die Daten von einer alten auf eine neue Version Ihrer Datenbank zu migrieren. Dies kann auch mit serialisierten Objekten geschehen, aber dann müssen die Objekte gleichzeitig neu und alt dupliziert werden. Und das klingt für mich sehr unheimlich und chaotisch, vor allem wenn man bedenkt, dass Sie möglicherweise von Version x zu y wechseln müssen, damit Sie am Ende einige ziemlich knifflige Probleme haben, wenn Sie die Domain-Objekte aktualisieren müssen. Und ich kann ehrlich gesagt keine Vorteile der Verwendung des Flat-File/Serialized-Ansatzes sehen.

+0

Also rein von der Geschwindigkeit und Speicherverwaltung Standpunkt, die Art, wie ich es jetzt habe (gespeichert als Datei) ist besser? – user496854

+0

Könnte schneller sein, um von einem serialisierten Objekt in die Datei zu schreiben, anstatt alle Daten in einen SQLite zu schreiben, aber das steht wirklich zur Debatte, und nur wenn Sie jeden einzelnen Wert aktualisieren. Wenn der Normalfall ist, dass Sie nur 10 von 200 Werten auffrischen müssen, wäre der SQLite für das Schreiben weit überlegen. Zum Lesen beim Start denke ich, dass man immer alles lesen muss, und dann hängt der Geschwindigkeitsunterschied nicht von der Datenmenge ab, aber um zu wissen, welche Alternative schneller ist, muss man wirklich ein Gerät ausprobieren, da es so viele gibt Variablen, die hier zum Tragen kommen. – erbsman

0

Sie erwähnen in Ihrer Frage, dass die Daten nur den Zustand der App speichern sollen, daher wäre meine erste Antwort, sie auf den Geräten zu behalten, besonders da Sie erwähnen, dass die Dateigröße nicht viel mehr als 10 MB betragen würde Das ist ziemlich vernünftig.

Also meine Antwort auf Sie wäre es zu behalten, wie es auf dem Gerät ist. Wenn sich Ihre Verwendung der Informationen in Zukunft ändert, sollten Sie diesen Ansatz überdenken, aber vorerst ist es völlig logisch.

+0

Es ist auf dem Gerät, egal, ob es auf dem Fice-System oder in einer Datenbank ist. Ich möchte nur wissen, ob es in irgendeiner Weise effizienter ist, SQLite zu verwenden. – user496854

0

Wenn Sie nur serialisierte Klassen speichern, können Sie einen ORM-Mapper verwenden, wie in this thread beschrieben. Dies erspart Ihnen die Unannehmlichkeit, einen eigenen Mapper zu schreiben und kann problemlos auf neue Klassen erweitert werden. Wenn sich Ihre Anforderungen ändern, könnten Sie auch nach Daten suchen.

Die einzigen Gründe für die Umstellung Ihres Systems auf SQLite wären mehr Komfort und vielleicht ein narrensichereres System. Z.B. Jetzt müssen Sie überprüfen, ob die Datei existiert, den Inhalt analysieren usw. und wenn Sie SQLite verwenden, müssen Sie die Integrität der Daten nicht überprüfen und Android hilft Ihnen auch ein wenig. Und Sie können die Daten für andere Zwecke verwenden, z. B. für die Anzeige in einer ListView.

+0

Also rein vom Standpunkt der Geschwindigkeit und des Speichermanagements ist die Art, wie ich sie jetzt habe (gespeichert als Datei), besser? – user496854