2010-09-06 5 views
2

La base de données actuelle a 200 mille enregistrements. Je veux faire une application iPad, puis-je exécuter 200 000 enregistrements avec sqlite? Je ne veux pas utiliser sqlite car la recherche est trop lente sur 32000. N'importe quel moteur de recherche comme lucene pour iPhone SDK? si on peut faire tourner lucene sur iPad ce sera génial car le projet actuel est basé sur lucene. Pouvez-vous me donner une suggestion?Puis-je exécuter iPad avec 200 000 enregistrements avec sqlite?

Merci Vous

+0

Creusez ces 'index '! 32k lignes de données ne peuvent être lentes sur aucune base de données! – Frankie

+0

32 Ko de lignes de données ne peuvent pas être lents sur n'importe quel support de données! :) – Frankie

+0

Je suggère d'utiliser "Comment faire la recherche de texte intégral sur iPad" comme titre de la question. SQLite n'est pas vraiment le problème ici. –

Répondre

1

J'ai récemment construit une application iPhone avec 86 000 lignes et SQLite.

Au début, je n'ai pas indexé ma ligne de serach et les recherches prenaient environ 1 seconde pour être exécutées sur un iPod touch de 2ème génération. Une fois que j'ai ajouté mes index, la recherche a été instantanée.

Pour être honnête, vous pourriez être en mesure d'obtenir des requêtes «similaires» sur le terrain que vous recherchez? Cela pourrait effectivement être assez bon. Je pense que vous constaterez qu'une fois que vous ajoutez des index à vos données, la taille de la base de données va vraiment croître et pourrait vous rendre l'application assez volumineuse et la mise en place d'un moteur de recherche complet pourrait être très pénible.

Voici un code pour effectuer rapidement des tests pour une base de données SQLite.

http://www.rvaidya.com/blog/iphone/2009/02/14/wrapper-classes-for-using-sqlite-on-iphonecocoa/

SQLiteResult *result = [SQLite query:@"SELECT * from test;"]; 
NSArray *row = [result.rows objectAtIndex:0]; 
NSString *firstValue = [row objectAtIndex:0]; 
+0

Si vous utilisez LIKE 'text%' alors c'est OK (SQLite peut utiliser un index dans ce cas), mais j'éviterais d'utiliser LIKE '% text%'. Cela entraînera une analyse de la table, et une analyse de la table sur 200 000 lignes est lente - peu importe la plate-forme que vous utilisez. Vous pourriez vous en sortir avec des données de test, mais il est probablement plus difficile de changer l'application plus tard que de commencer avec le bon algorithme. –

0

Je comprends Lucene est écrit en Java - Ce serait dire que vous ne pouvez pas l'utiliser sur l'iPad.

Avez-vous créé des index dans votre base de données Sqlite? D'après mon expérience, Sqlite est vraiment très rapide. Si les données de base sont trop lentes, vous pouvez également essayer d'utiliser l'API C native.

+0

oui. Je connais. Lucene ne peut pas fonctionner sur iPad. Je vais essayer avec sqlite ou si je suis satisfait de la vitesse, nous devrions écrire l'API C native. – saturngod

2

Je vous suggère de créer votre propre index. Je ne pense pas que SQLite sur l'iPhone supporte les déclencheurs, mais vous pouvez toujours utiliser un algorithme similaire à l'implémentation H2 fulltext search. L'idée est de diviser les données textuelles en mots, puis de les ajouter à une table indexée sur le mot. Le algorithm for building the index est relativement simple. La recherche fulltext H2 native n'a pas toutes les fonctionnalités de la recherche fulltext Lucene, mais elle est beaucoup plus simple à implémenter.

+0

J'aime cette idée. C'est en fait assez simple et je l'ai fait il n'y a pas si longtemps. –

1

Ce blog post décrit un port de Lucene à l'objectif C. Vous pouvez essayer d'utiliser le code, mais il semble un peu daté.