Dois-je créer une nouvelle base de données SQLite chaque fois qu'une application est mise à jour?

j'ai une application Xamarin Forms que j'aimerais développer. Il disposera d'une base de données SQLite et je souhaite la rendre disponible sur iOS et Android. La base de données sera remplie de données provenant d'une base de données SQL Server sur le nuage avec les données initiales de seed. Je pense ce sera environ 500 lignes de données avec chaque ligne d'environ 1 ko.

ce que je ne comprends pas, c'est quand et comment peupler ça. Devrais-je essayer de mettre les données dans un fichier CSV et avoir cela peupler le base de données quand l'application est installée,ou quand elle commence? Quelle est la façon normale de remplir les données de la graine autres que les lignes à l'intérieur du code avec un grand nombre de déclarations insert.

toute aide ou conseil sur la façon de faire normalement (je pense que la plupart des gens le font de la même façon) serait grandement apprécié.

Merci

21
demandé sur Alan2 2016-08-11 18:43:56

2 réponses

permet de décomposer le problème.

est-ce que les données initiales que vous souhaitez utiliser dans votre application vont changer avec le temps?

si vous incluez des données préremplies (un fichier SQLite, Realm, ou CSV, ...) et les données que vous incluez goes périmé et que vous devez mettre à jour sur une base régulière, vous aurez besoin de publier une mise à jour de la demande ( .apk / .ipa ) ainsi, votre nouvel utilisateur installe recevoir les données mises à jour (plus sur ce ci-dessous).

Note: cela suppose que vos utilisateurs actuels obtiennent les données mises à jour via l'exécution réelle de votre application et il traite les mises à jour de données locales sur une base de routine (service d'arrière-plan, notifications push, sondage de données, etc..)

est-ce un secteur d'activité ( LoB ) application publiée par Ad-Hoc, de la banque privée, et/ou iOS de publication d'Entreprise?

si vous contrôlez la base d'utilisateurs, que d'avoir à forcer une installation de mise à jour pour que vos utilisateurs obtiennent vos nouvelles/mises à jour des données pré-remplies pourrait être une approche acceptable, mais pas une grande expérience utilisateur si ils ont forcé à mettre à jour l'application tout le temps... mais il fonctionne...

est-ce que cette application va être distribué via les boutiques Apple et Google App?

c'est là que vous devez être très prudent sur les données pré-remplies que vous incluez dans votre application.

si les données sont périmées et que vous avez besoin de pousser une version d'application mise à jour dans les magasins pour votre nouvelle installation installe, méfiez-vous qu'il pourrait être jours (ou semaines ou même mois+) pour obtenir cette nouvelle application dans le magasin.

Le Jeu Magasin habituellement est moins de 24 heures sur la publication des mises à jour de l'application, et alors que le magasin D'Apple peut être le même, ne pariez pas sur elle .

nous voyons régulièrement des retards de 48-72 heures et au hasard obtenir rejeté et donc il peut prendre une semaine ou plus pour obtenir une application de mise à jour dans le magasin D'Apple. Nous avons eu des rejets retardant une mise à jour de l'application pendant plus d'un mois et sommes entrés dans le processus d'appel et même enlevé des fonctionnalités déjà existantes pour obtenir re-publiée

Note : chaque mise à jour de l'application à la boutique Apple réinitialise vos avis utilisateurs... :- (

ligne de fond : vous voulez publier dans les magasins lorsque vous corrigez des bogues et/ou ajoutez des fonctionnalités, pas pour mettre à jour certaines données "statiques" qui sont stockées dans votre application bundle...

Qu'est-ce que ces données coût votre utilisateur final et vous?

coûts Négatifs pour vous comme un développeur d'application sont de mauvaises critiques et désinstalle. Regardez comment ces "données" effets les utilisateurs finaux d'accéder à votre application et comment ils réagissent. Temps de téléchargement plus long, généralement acceptable. Temps de démarrage initial de l'application plus long, moins acceptable... etc....

Quels marchés sera votre application utilisé? Les vitesses de réseau et le coût du transfert de données dans de nombreux marchés à travers le monde sont lents et coûteux...

Quelle est réellement la taille réelle des données?

I "pré-peupler" une instance de données de domaine avec des milliers de lignes avec 5 Mo de données JSON en moins d'une seconde. SQLite prend plus de temps, mais ce n'est pas mal. Les données elles-mêmes sont stockées dans un zip et accessibles sous la forme d'un fichier statique (get basé sur https) et à un facteur de compression de 80%, le 1MB de données compressées est tiré d'un serveur (AWS S3) en moins d'un ensuite, en utilisant les vitesses de données cellulaires LTE et en les décompressant comme flux, tout en désérialisant le JSON on-fly pour mettre à jour l'instance Realm ajoute une autre seconde...

donc, l'impact de l'utilisateur est très faible et je" cache "cette mise à jour initiale pré-peupler via un écran de bienvenue première fois et un certain texte que l'utilisateur lit avec espoir avant d'arriver à la première" vraie " application écran...

Note: Cela fait supposer que l'utilisateur aura un réseau accès aux données la première fois qu'ils ouvrent l'application... Dans de nombreux marchés à travers le monde, ce n'est pas vrai, donc en tenir compte dans la conception de votre application.

j'ai également conçu l'application pour que ses données puissent être mises à jour sur les threads de fond lors de son lancement (le premier ou non) et donc l'utilisateur ne reste pas là à regarder un indicateur de busy tournant, ils peuvent au moins interagir avec les données qu'ils ont.

vous devez donc inclure toute de données dans votre application bundle?

bien sûr, quand ces données sont absolument nécessaires pour obtenir l'utilisateur en marche aussi vite que possible pour améliorer l'expérience de l'utilisateur. Les jeux sont un bon exemple de cela dans le groupement de 100s de mégaoctets ou même gigaoctets via .obb ... avec les différents niveaux, des fichiers multimédias, etc... dans l'application de sorte que l'utilisateur ne vit pas un 10+ min. les temps d'attente lors de l'ouverture de l'application la première fois.

ça veut dire que leur temps de téléchargement initial pour l'installation était plus long que les données ont été groupées dans l'application, l'expérience globale de l'utilisateur était meilleure que les utilisateurs acceptent les temps de téléchargement/installation et de voir que comme un transporteur/téléphone/plan de service par rapport au temps d'ouvrir votre application la première fois pour se rendre effectivement à un écran fonctionnel.

alors que faire?

personnellement, j'examine cette question au cas par cas. Je regarde les données, et si elle ne va pas changer et seulement être ajouté et éventuellement élagué au fil du temps, l'inclure comme un SQLite pré-peuplé ou magasin de Royaume ou... Pourquoi faire attendre l'utilisateur pour les requêtes web, les mises à jour de la base de données et l'utilisation supplémentaire de données réseau et les coûts associés. Si les données vont aller rassis, ne pas mélanger dans votre application.

quant à la mécanique de l'installation de données pré-peuplées:

voir ma réponse sur cette question SO à propos de " Bundle prédéfinis Royaume des fichiers "

10
répondu SushiHangover 2017-05-23 12:34:24

vous n'avez pas à créer votre base de données sqlite chaque fois que l'application est mise à jour. En fait SQLiteOpenHelper fournit les deux méthodes suivantes:

  1. OnCreate() : vous devez implémenter cette méthode et créer votre base de données sqlite avec les données du serveur. Elle est appelée lorsque l'application est démarrée pour la première fois.
  2. OnUpgrade() : vous devez implémenter cette méthode si vous voulez modifier la base de données (ajouter une nouvelle table ou colonne dans un tableau) ou remplir des données supplémentaires.

la base de données est conservée entre les mises à jour de l'application et vous n'avez pas besoin de la créer à chaque fois.

Cochez les exemples suivants qui expliquent comment utiliser la base de données sqlite avec Xamarin:

utilisant le Sqlite dans un Xamarin.Application Android développée en utilisant Visual Studio

et

Une Introduction à Xamarin.Forms and SQLite

6
répondu Abdulhamid Dhaiban 2016-08-15 16:06:04