145 votes

Avantages et inconvénients de SQLite et des préférences partagées

Quel est le bon mécanisme pour stocker des informations entre la base de données SQLite et les préférences partagées ?

Pourquoi utiliser les préférences partagées ? Pourquoi utiliser sqlite ? J'ai essayé de trouver la différence entre eux, et quel est le meilleur mécanisme pour le stockage des données, mais je ne parviens pas à trouver la réponse appropriée sur Google. Veuillez m'aider avec des exemples et des explications.

155voto

Flo Points 13170

Cela dépend vraiment des données que vous voulez stocker.

SQLite

De grandes quantités de données structurées identiques doivent être stockées dans une base de données SQLite, car les bases de données sont conçues pour ce type de données. Comme les données sont structurées et gérées par la base de données, elles peuvent être interrogées pour obtenir un sous-ensemble de données correspondant à certains critères à l'aide d'un langage d'interrogation comme SQL. Cela permet d'effectuer des recherches dans les données. Bien entendu, la gestion et la recherche de grands ensembles de données influent sur les performances. Ainsi, la lecture des données d'une base de données peut être plus lente que la lecture des données de SharedPreferences.

Préférences partagées

SharedPreferences est un magasin clé/valeur où vous pouvez enregistrer des données sous une certaine clé. Pour lire les données du magasin, vous devez connaître la clé de ces données. Cela rend la lecture des données très facile. Mais aussi facile qu'il soit de stocker une petite quantité de données, il est difficile de stocker et de lire de grandes données structurées, car vous devez définir une clé pour chaque donnée. De plus, vous ne pouvez pas vraiment effectuer de recherche dans les données si vous ne disposez pas d'un certain concept pour nommer les clés.

91voto

Tom Points 4834

Cette question a une réponse acceptée, mais je pense qu'il y a plus à dire sur le sujet - concernant la vitesse.

Les préférences partagées et la base de données Sqlite d'une application sont toutes deux de simples fichiers, stockés dans les répertoires de l'application sur le système de fichiers du périphérique. Si la quantité de données n'est pas trop importante, l'option Sqlite impliquera un fichier plus grand et plus compliqué avec plus de frais de traitement pour un accès simple.

Donc, si la nature des données ne dicte pas votre choix (comme expliqué dans la réponse acceptée), et que la vitesse compte, alors il est probablement préférable d'utiliser SharedPreferences.

Et la lecture de certaines données est souvent sur le chemin critique de l'affichage de l'activité principale, donc je pense que la vitesse est souvent très importante.

Une dernière réflexion concernant la vitesse et l'efficacité : si vous devez utiliser une base de données Sqlite pour certaines données structurées, il est probablement plus efficace de stocker également les préférences de l'utilisateur dans la base de données afin de ne pas ouvrir un deuxième fichier. Il s'agit d'une considération assez mineure - qui ne vaut probablement la peine d'être prise en compte que si vous devez accéder à la fois aux données structurées et aux préférences avant de pouvoir afficher l'activité principale.

23voto

inmyth Points 235

À mon avis, ce n'est pas une question de vitesse ou de taille, mais de type d'opération que vous souhaitez effectuer sur vos données.

Si vous prévoyez de faire rejoindre , trier , et autres opérations de la DB sur vos données, alors optez pour Sqlite . Un exemple est le tri des données par date.

Si vous voulez mettre en correspondance des valeurs simples (comme int, boolean, String), utilisez Préférences . DB ne fonctionneront pas ici et il va sans dire que vous devez avoir toutes les clés. Un exemple est le mot de passe de l'utilisateur ou la configuration de l'application.

La grande tentation d'adopter les préférences est de les utiliser pour stocker un POJO aplati (un objet JSON sérialisé) sous forme de chaîne. Avoir un tel besoin est en fait le signe pour utiliser Sqlite. Pourquoi ? Parce que des données complexes nécessiteront éventuellement des opérations complexes. Imaginez la récupération d'une entrée spécifique qui pourrait être traitée par un simple "SELECT ... WHERE id = 1". Dans le chemin des préférences, ce sera un long processus, de la désérialisation à l'itération des résultats.

7voto

Sami Al-Jabar Points 133
  • Pour stocker d'énormes quantités de données, optez pour le système de base de données SQLite. Ce site permettra également à l'utilisateur de rechercher des données.

  • En revanche, pour le stockage d'une petite quantité de données, optez pour les préférences partagées. Les préférences. Dans ce cas, un énorme système de base de données est inutile. L'utilisateur pourra ainsi simplement enregistrer des données et les charger.

-15voto

greenspand Points 80

Oubliez SQLLite, oubliez SharedPreferences, utilisez Realm. Une solution unique pour tout votre stockage local. Vous pouvez utiliser de vieux objets Java comme RealmObjects et y stocker vos données. Vous pouvez convertir des requêtes sélectionnées en fichiers JSON. Il n'est pas nécessaire d'analyser l'ensemble de la base de données. Consultez ce lien : https://realm.io/news/introducing-realm/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X