Dictionnary [String:AnyObject] ou base de donnée ?

Bonjour à tous,

ma question est assez simple, lors de la lecture d’un retour JSON de type :

{ - data : [
           ...
           3000 index avec [10 sous niveaux chacun]
           ...
           ]
}

Mieux vaut-il utiliser la méthode de stockage des données comme citer par @didier dans ce sujet : Je patauge avec Alamofire qui utilise un tableau [String:AnyObject] (cf. la fin du sujet)?

OU

mieux vaut-il utiliser la méthode REALM avec stockage des données dans une base de données ?

Sachant que je n’ai besoin de faire que de la lecture d’informations. Je n’ai pas besoin d’ajouter ou modifier des données.
Je suppose que les tableaux ont une capacité de stockage inférieur à celle d’une base de donnée et que le traitement d’infos est plus rapide avec une base de donnée. Mais lorsqu’il s’agit de ne faire que de la lecture d’infos je me demandé si s’était judicieux d’alourdir mon appli avec une base de donnée.

Salut Alexandre,

c’est une question intéressante mais à laquelle il est difficile de répondre avec un choix ferme. Ca dépend de pleins de paramètres et le mieux est de tester et mesurer avec le profiler.
Voici quelques interrogations et chacune fait pencher la balance d’un côté ou de l’autre :

  • Est-ce que ces données sont différentes à chaque chargement de l’URL? Si non, avantage à la base de données pour ne pas les retélécharger inutilement à chaque fois.
  • Si elles changent à chaque fois, est-ce que tu as besoin d’un cache pour rester fonctionnel quand tu es hors-ligne ? Si oui, avantage à la base de données
  • A quoi vont servir ces données ? Une table view ?

Dans tous les cas, 3000 lignes ça fait beaucoup et l’idéal serait de pouvoir découper pour n’obtenir que ce dont tu as vraiment besoin.

Si tu ne peux pas découper et que tu cherches juste à afficher les données dans une tableview sans jamais les stocker alors un tableau peut probablement suffire. Essaie de privilégier les struct plutôt que les classes pour les objets que tu vas créer et stocker dans ton tableau car ils sont alloués beaucoup plus rapidement donc si tu dois en créer 3000 ça vaut le coup :slight_smile:

Merci beaucoup pour la réponse !
Cela m’a permis de faire un choix entre les deux méthodes. J’ai opté pour la base de donnée. Dans l’évolution de mon application j’aurais besoin d’intervenir sur les données et je veux aussi gérer un mode hors-ligne.

Par contre s’est un sacré bordel d’injecter du JSON dans une base de donnée Realm mais une fois que c’est fait, c’est très plaisant à manipuler.

J’ai dû utiliser 6 pods :
pod 'Alamofire’
pod 'RealmSwift’
pod 'ObjectMapper’
pod 'AlamofireObjectMapper’
pod 'ObjectMapperAdditions/Realm’
pod “ObjectMapper+Realm”

Donc si quelqu’un est bloqué sur ce sujet je pourrais l’aider.

Merci encore pour la réponse @mbritto j’en déduis donc qu’il n’y a pas vraiment de limite de capacité concernant les ARRAY ?

1 « J'aime »

Salut Aalexandre,

Ce que tu peu faire c’est en fait dans ton object realm crée une variable de type String et y stocker ton object Json sous forme de text. Quand tu en a besoin tu va le rechercher dans realm , un pti coup de JSONDecoder() et hop t’a ton object.

Oui effectivement c’était une autre solution, plus simple peut être. J’y avais pas pensé. Mais je pense que ça dépend vraiment de ce que tu veux faire après. En l’occurence dans mon cas j’ai plus d’avantage à avoir une base de données bien propre.

Non je ne pense pas qu’il y ait de limite sur la taille des tableaux en Swift mais en termes de performances et de consommation de mémoire il vaut mieux essayer de rester raisonnable :slight_smile: