2010-09-10 10 views
0

Une application iPhone que nous produisons aura potentiellement une table avec plus de 100 000 enregistrements (scaling wise) et je suis préoccupé par le chargement de toutes ces données via une commande SELECT * dans un tableau, ou un objet soit rendre l'application très lente; ou me laissera avec des problèmes de mémoire plus tard.Étalement des enregistrements sqlite avec Objective C

De toute évidence, le chargement de plus de 100 000 enregistrements dans un tableau lorsque l'écran de visualisation/la fenêtre de visualisation ne montre que 30 enregistrements impairs est un peu ridicule.

En outre, je ne suis pas sûr si le stockage de toutes ces données dans un objet est la bonne chose à faire soit. Donc, ma question est, est-il possible d'échelonner sqlite à travers les enregistrements, disons 50 enregistrements dans le cache et puis quand vous balayez vers le bas ou vers le haut, il charge une quantité appropriée dans le cache. Je suppose que c'est similaire à la bibliothèque JQuery Lazy Loading où il charge seulement un peu sur le port d'affichage et charge ensuite plus que vous descendez. Je regarde JSON, mais il semble être seulement pour les services Web car il nécessite une URL et je ne suis pas sûr si cela fonctionne pour les fichiers qui sont sur le téléphone.

Par conséquent. Existe-t-il un moyen approprié de charger des données sqlite dans des tableaux/objets Objective C sans causer de problèmes lorsque les données commencent à se mettre à l'échelle?

Merci pour votre aide.

Répondre

1

Vous voulez absolument éviter de charger tout en même temps. Au lieu de cela, vous souhaitez utiliser des requêtes cursor et plus intelligentes afin de ne sortir les données de la base de données que lorsque vous en avez réellement besoin pour l'affichage; ce lien pointe vers quelques conseils sur la façon de le faire.

Généralement, vous devez également éviter de sélectionner toutes les colonnes à l'aveuglette. En effet, vous pouvez parfois mettre à jour le schéma pour ajouter une colonne que votre code existant ne sait pas toujours extraire; mieux vaut nommer les colonnes explicites que vous attendez et désirez.

+0

Salut, je n'ai jamais rencontré de curseurs avant, je vais y jeter un coup d'oeil. L'autre alternative est d'avoir une sorte de pagination dans l'application elle-même, mais cela signifie qu'elle ne défile plus. S'il y a une autre réponse, je vais certainement l'examiner. – zardon

+0

@worchyld: Eh bien, la principale difficulté à retenir est que vous ne pouvez pas rembobiner un curseur (il y a un programme derrière, pas une structure de données) donc si vous avez besoin de revenir en arrière, vous devez recommencer. Si vous avez une colonne indexée en augmentation monotone, cela peut être très simple à faire en pratique, et rapide aussi. –

+0

Je suis toujours à la recherche d'exemples pour l'utiliser. J'ai entendu dire que vous pouvez utiliser OFFSET/LIMITs dans la tableView, mais je ne peux pas trouver d'exemples où cela est utilisé ou comment. – zardon