2010-11-11 6 views
1

Je construis un autosuggest. Pour l'instant, l'application de destination est un ordinateur de bureau, mais l'idée est de le construire aussi fort que possible et ensuite de l'inclure dans un site Web.Construire autosuggest

En ce moment je suis au tout début du projet: penser la base de données (SQL Server 2008)

Le autosuggest va être d'une table de ~ 40.000.000 de lignes.

En ce moment, mes options sont: la recherche en texte intégral ou construire une table comme je vais vous décrire maintenant:

Mes AutoSuggest articles:

a b c 
1 2 3 
x y z 

Le tableau résultant:

a b c    a b c 
a b c    a c b 
a b c    b a c 
a b c    b c a 
a b c    c a b 
a b c    c b a 

Et donc pour chaque article.

Ma question:

Wich est de ceux mieux quand je suis à la recherche de minimiser la recherche des éléments de la liste autosuggestion? Y a-t-il un autre meilleur?

Merci!

Diego

Répondre

1

À mon avis FULLTEXT serait mieux, même si vous avez seulement besoin des correspondances exactes.

Cependant, même si vous décidez de ne pas utiliser FULLTEXT, pourquoi avez-vous besoin d'indexer toutes les permutations? Vous pouvez les indexer une fois dans l'ordre alphabétique (a, b, c) et réarranger les éléments dans le même ordre avant de les fournir comme paramètre à la requête.

qui est, vous devriez toujours chercher C, D, O même si votre requête dit O, C, D

+0

Je suis l'indexation de toutes les permutations parce que je ne cherche pas la correspondance exacte et je veux réduire tous posible l'heure de la requête sur chaque recherche. Ainsi, lorsque les utilisateurs commencent à taper n'importe quel mot, je peux faire un «mot%» comme LIKE et c'est tout. – Diego

+0

@Diego: dans ce cas, vous devriez certainement utiliser un index 'FULLTEXT' – Quassnoi

+0

@Diego: et même si vous décidez d'utiliser les index' B-Tree', vous n'avez pas besoin d'indexer toutes les permutations. Dans votre cas, index "a, b, c", "b, a" et "c, b", ceci n'est que "3" enregistrements, pas "6". Voir cet article: http://explainextended.com/2009/05/09/creating-indexes/ – Quassnoi

0

Alors ... vous voulez interroger une table avec 40 millions de disques en fonction de l'entrée partielle, correspondant à une partie de la colonne (ou même plusieurs colonnes), probablement de plusieurs utilisateurs simultanément ... et je suppose que vous attendez des temps de réponse inférieurs à la seconde.

Votre serveur de DB mieux être une vraie bête. Je recommande fortement de repenser votre plan ou au moins limiter les choix que les utilisateurs ont, comme restreindre la recherche au début de la colonne, etc.
Mais si vous décidez de continuer avec ceci, fulltext est hors de la question, sauf si vous incluez une sorte de curseur d'attente amusant dans votre application pour divertir les utilisateurs pendant que la requête autosuggestion est en cours d'exécution.

+0

Oui, je m'attends à des temps de réponse inférieurs à la seconde. Mais toutes les permutations que je sauvegarde sont exactement pour éviter ce que vous dites: "correspondant à n'importe quelle partie de la colonne (ou même plusieurs colonnes)". Non, juste une colonne et juste au début (à cause des permutations). – Diego