2009-11-26 8 views
11

Je développe une application qui envoie périodiquement des informations à un serveur externe. Je fais une copie locale des données envoyées, à des fins de sauvegarde.Stockage de données Android - Fichier vs SQLite

Quelle est la meilleure option pour stocker les données en termes de sauver la vie de la batterie? Chaque soumission de données est un objet sérialisé (la classe a 5 champs, y compris une date, des nombres et des chaînes) d'environ 5K-10K.

Une autre idée?

Répondre

13

Je n'ai aucune idée en termes de durée de vie de la batterie directement, mais un critère serait lequel est plus facile à gérer? Moins d'opérations pour gérer les données signifierait moins de cycles CPU et donc une durée de vie plus longue de la batterie. Je dirais que l'option SQLite est plus facile. Vous pouvez placer une colonne de date dans la table SQLite qui stocke vos données, ce qui vous permet de supprimer facilement les anciennes soumissions dont vous n'avez plus besoin - et tout cela via la bibliothèque SQL native. Gérer une charge entière de fichier - ou pire un seul fichier - avec votre propre code Java serait beaucoup plus de travail.

De plus, vous pouvez écrire des données dans la base de données et les oublier jusqu'à ce que vous ayez besoin de les lire à nouveau. Si vous stockez des données dans des fichiers, vous devrez travailler quand vous devriez lire et écrire des fichiers en termes sur le Android application life cycle. Si vous vous inquiétez de la batterie, vous ne voudrez probablement pas écrire des fichiers plus souvent que vous n'auriez dû et mettre en cache des données en mémoire, mais vous devrez vous assurer de ne perdre aucune donnée lorsque votre application est en pause ou détruite . À mon avis, il est beaucoup plus facile d'utiliser une base de données SQLite et ne vous inquiétez pas de tout cela.

+0

Merci pour vos commentaires, semblent très raisonnables. Savez-vous si la base de données est toujours exécutée en arrière-plan (en tant que base de données traditionnelle) ou si elle s'exécute uniquement lorsqu'une application l'utilise? Je veux dire, si le "serveur SQLite" (si un tel processus existe dans Android) est démarré juste à cause de mon application ... ce n'est peut-être pas une bonne idée. –

+10

afaik sqlite est juste un fichier auquel vous accédez via des bibliothèques, il n'y a pas de serveur de base de données en cours d'exécution. – tosh

15

Je ne crois pas que ce soit important si vous utilisez SQLite ou un fichier, car la base de données SQLite est simplement un fichier sur le système (stocké dans /data/data/<your_package>/databases/). Vous aurez besoin de valider la base de données au bon moment, tout autant que vous auriez besoin d'enregistrer un fichier sur le disque dur au bon moment. En d'autres termes, d'une manière ou d'une autre, vous pouvez utiliser autant d'écritures de disque dur.

Je pense que ce que vous choisissez dépend plus du type de données que vous enregistrez. Si vous avez besoin des pouvoirs qui ont un db (comme l'interrogation), alors utilisez SQLite. Cependant, si vous n'avez pas besoin d'une base de données, ou si vous avez des données qui varient énormément (et qui ne peuvent pas être facilement installées dans une base de données relationnelle), alors j'irais avec des fichiers. Ce que je peux vous dire à coup sûr, c'est que vous devez pas utiliser utiliser la sérialisation pour enregistrer un fichier, si tel est le chemin que vous choisissez d'aller. La sérialisation Android est lente, lente, lente et crée des fichiers volumineux. Il est préférable d'écrire votre propre format XML ou JSON pour des raisons de performances.

4

Votre application est-elle multithread? Si vous avez plusieurs threads accédant au magasin de données, j'irais avec SQLite. Laissez SQLite s'inquiéter des problèmes de verrouillage.

+0

Attention, SQLite n'est pas thread-safe sur certaines plates-formes (Xamarin) – nVentimiglia