2010-09-15 6 views
1

J'ai beaucoup de données stockées localement (10000+ enregistrements de données) (non décidé sur la façon encore - cela fait partie de la question)Implémentation de la recherche incrémentale sur iphone

Comment puis-je mettre en œuvre la recherche incrémentale sur ces données (sur un champ spécifique)?

Comment dois-je configurer les données localement?
XML? plist? sqlite?

Dois-je utiliser des données de base pour l'accès?

Répondre

0

Vous souhaitez probablement utiliser des données de base et vous le faites certainement s'il existe des relations entre les enregistrements. Sans données de base pour gérer les relations, la complexité de l'application peut faire boule de neige. Il est communément admis que Core Data gère automatiquement beaucoup de complexité, ce qui implique inévitablement des compromis sur les performances, de sorte que, même si les Core Data peuvent être faciles à mettre en œuvre, elles doivent être la solution la plus lente. Il s'avère que ce n'est généralement pas le cas en raison de l'énorme quantité de l'ajustement que Apple a fait sous le capot. Il est plutôt difficile d'écrire à la main une solution qui peut mieux traiter les données de base pour la plupart des cas d'utilisation.

Je vous recommande de commencer avec la solution Core Data la plus simple et d'obtenir plus de complexité uniquement si vous testez la solution simple et trouvez qu'elle ralentit. Je voudrais commencer par chercher une force brute et voir si c'est assez rapide. L'étape suivante consisterait à effectuer des extractions uniquement sur une seule entité de l'entité, par ex. l'attribut name d'une entité Person, puis récupère l'entité entière uniquement lorsque cela est nécessaire. Si cela doit encore ralentir, vous devrez penser à implémenter une sorte de structure arborescente dans le graphe d'entités (ce qui n'est pas difficile).

L'optimisation prématurée est la racine de tout mal. N'essayez pas de prendre des décisions d'optimisation sans les données générées par les tests. Vous perdrez plus de temps à long terme. Commencez simplement et ajoutez de la complexité seulement quand c'est absolument nécessaire.

1

Les enregistrements 10K ne sont pas trop mauvais. Assurez-vous de définir la taille du lot d'extraction. Par exemple, si sur iPhone, seules 10 lignes sont visibles à la fois, une taille de lot de 10 est logique. De même - et c'est absolument essentiel pour atteindre des vitesses décentes - assurez-vous de cocher la case «Indexé» dans l'inspecteur de modèle de données pour les champs appropriés dans votre modèle de données de base.

Si l'ensemble de données augmente, vous pouvez envisager une solution plus sophistiquée. Voir le "Directed acyclic word graph" sur Wikipedia.

Si vous y parvenez, vous pouvez trouver un code d'implémentation sur Sourceforge. C'est C++ mais vous pouvez renommer votre fichier Objective C .m en .mm et inclure n'importe quel code C++.

Questions connexes