J'ai le problème suivant: J'ai une base de données contenant plus de 2 millions d'enregistrements. Chaque enregistrement a un champ de chaîne X et je veux afficher une liste des enregistrements pour lesquels le champ X contient une certaine chaîne. Chaque enregistrement a une taille d'environ 500 octets.
Pour le rendre plus concret: dans l'interface graphique de mon application, j'ai un champ de texte où je peux entrer une chaîne. Au-dessus du champ de texte, j'ai un tableau affichant les (premiers N, par exemple 100) enregistrements qui correspondent à la chaîne dans le champ de texte. Lorsque je tape ou supprime un caractère dans le champ de texte, le contenu du tableau doit être mis à jour à la volée.
Je me demande s'il existe un moyen efficace de le faire en utilisant des structures d'index appropriées et / ou la mise en cache. Comme expliqué ci-dessus, je souhaite uniquement afficher les N premiers éléments qui correspondent à la requête. Par conséquent, pour N suffisamment petit, cela ne devrait pas être un gros problème de chargement des éléments correspondants à partir de la base de données. En outre, la mise en cache des éléments dans la mémoire principale peut accélérer la récupération.
Je pense que le principal problème est de trouver rapidement les éléments correspondants, compte tenu de la chaîne de modèle. Puis-je compter sur certaines fonctionnalités du SGBD ou dois-je créer moi-même un index en mémoire? Des idées?
MODIFIER
J'ai exécuté une première expérience. J'ai divisé les enregistrements en différents fichiers texte (au plus 200 enregistrements par fichier) et placé les fichiers dans différents répertoires (j'ai utilisé le contenu d'un champ de données pour déterminer l'arborescence des répertoires). Je me retrouve avec environ 50000 fichiers dans environ 40000 répertoires. J'ai ensuite exécuté Lucene pour indexer les fichiers. La recherche d'une chaîne avec le programme de démonstration Lucene est assez rapide. Le fractionnement et l'indexation ont pris quelques minutes: c'est tout à fait acceptable pour moi car c'est un ensemble de données statiques que je souhaite interroger.
L'étape suivante consiste à intégrer Lucene dans le programme principal et à utiliser les hits renvoyés par Lucene pour charger les enregistrements pertinents dans la mémoire principale.