Tout d'abord tout ce que je sais:
L'optimisation prématurée est la racine de tout mal p> blockQuote>
mais je pense que je pense que le mauvais bouton peut vraiment faire exploser votre site. P>
Je voudrais savoir s'il y a des bibliothèques qui peuvent effectuer une autocomplete efficace (Serveride) que préférable peut s'intégrer à RAM (pour la meilleure performance). Donc, pas de navigateur JavaSride de navigateur (YUI / JQUERY / DOJO). Je pense qu'il y a suffisamment de sujet à ce sujet sur Stackoverflow. Mais je ne pouvais pas trouver un bon fil à ce sujet sur Stackoverflow (peut-être pas assez bon). P>
Par exemple, des noms d'autocomplete: P>
names:[alfred, miathe, .., ..]
- SIMPLE SQL comme par exemple:
Sélectionnez le nom des utilisateurs où nom comme al% code>.
- Je pense que cette mise en œuvre va exploser avec beaucoup d'utilisateurs simultanément ou un ensemble de données volumineux, mais peut-être que je me trompe alors des chiffres (qui pourraient être manipulés) seraient cool. Li> ul> li>
- en utilisant quelque chose comme des termes solriens tels que par exemple:
http: // localhost: 8983 / SOLR / TERMINS? TERMINS.FL = nom et termes.sort = index et termes.Prefix = al & wt = json & omitheader = true code>.
- Je ne connais pas la performance de ce type d'utilisateur avec de grands sites s'il vous plaît dites-moi. Li> ul> li>
- Peut-être quelque chose comme dans Redis TRIE que je n'ai pas non pas testé la performance. LI >
- Je lis aussi dans ce fil sur la manière de mettre en œuvre cela dans Java (Lucene et certains Bibliothèque créée par Shilad) Li> ul>
Ce que j'aimerais entendre, c'est la mise en œuvre utilisée par les sites et les numéros de la manière dont elle peut gérer la charge préférable avec: p>
- lien vers la mise en œuvre ou le code. LI>
- numéros auxquels vous savez que cela peut échelle. Li>
- Ce serait bien s'il pouvait être accédé par http ou des prises. li> ul>
Merci beaucoup,
Alfred p> p>
3 Réponses :
Malheureusement, la résolution de cette question dépendra fortement des données que vous espérez interroger. P>
Les requêtes similaires ne mettront pas trop de contrainte sur votre base de données, tant que vous passez du temps à utiliser "Expliquer" ou le profileur pour vous montrer comment l'optimisateur de requête envisage d'effectuer votre requête. P>
Quelques bases à garder à l'esprit: p>
index: assurez-vous que vous avez la configuration des index. (Oui, dans de nombreux cas, comme utilise les index. Il y a un excellent article sur le sujet sur Myitforum. Performance SQL - Index et la clause similaire ). P> LI>
jointures: Assurez-vous que vos jointures sont en place et sont optimisées par le planificateur de requête. Le profileur SQL Server peut vous aider avec cela. Recherchez des analyses d'indice complet ou de table complète p> li> ul>
Les requêtes complètes automatiques sont un cas particulier, en ce sens qu'elles fonctionnent généralement comme des sous-ensembles réduisants. p>
'nom' comme "A%" code> (peut renvoyer 10000 enregistrements) li>
-
'nom' comme 'al% code>' (peut renvoyer 500 enregistrements) li>
-
'nom' comme "ALA%" code> (peut renvoyer 75 enregistrements) li>
-
'nom' comme "alan%" code> (peut renvoyer 20 enregistrements) li>
ul>
Si vous renvoyez l'ensemble des résultats pour la requête 1, il n'est pas nécessaire de toucher la base de données à nouveau pour les ensembles de résultats suivants car ils sont un sous-ensemble de votre requête d'origine. P>
Selon vos données, cela peut ouvrir une nouvelle occasion d'optimisation. P>
En ce moment je pense que cela la meilleure réponse pour moi. Mais j'espère que d'autres personnes vont raconter son expérience.
Je ne répondrai pas à vos exigences et, évidemment, les numéros d'échelle dépendront du matériel, de la taille de la DB, de l'architecture de l'application et de plusieurs autres articles. vous devez le tester vous-même. strong> p>
Mais je vais vous dire la méthode que j'ai utilisée avec succès: p>
espère que cela aide. P>
Sélectionnez le nom des utilisateurs où nom comme al%. code> mais utiliser
top 100 code> pour limiter le nombre de résultats. LI>
Quelques autres conseils aléatoires, pas dignes d'une réponse flonde complète: indexez la colonne de recherche. Démarrez l'autocompleure au deuxième ou troisième caractère. Méfiez-vous de rincer le cache lorsque le jeu de données change ou mettez-le à jour en quelque sorte. Si la liste de sortie est assez grande, envisagez de la compresser. Si vous visez un site vraiment grand, envisagez un proxy inversé en cache pour ce type de matériel semi-statique (et n'oubliez pas de définir l'en-tête de réponse concernant le délai de cache à quelque chose d'esprit d'esprit)
Utiliser le composant SQL VERSUS SOLR n'est vraiment pas une comparaison. À leur base, ils résolvent le problème de la même manière en faisant un index et en faisant des appels simples. P>
Ce que je voudrais savoir, c'est "ce que vous essayez de compléter automatiquement". p>
En fin de compte, la voie la plus facile et la plus sûre d'échelle d'un système est de faire une solution simple, puis d'inclure simplement le système en répliquant les données. Essayer de mettre en cache des appels ou de prédire les résultats, il suffit de rendre les choses compliquées et n'arrivez pas à la racine du problème (c'est-à-dire que vous ne pouvez les prendre jusqu'à présent, comme si chaque demande a raté le cache). P>
Peut-être un peu plus d'informations sur la structure de vos données et la manière dont vous voulez le voir extraite serait utile. P>
Dites par exemple Nom de l'autocomplete: [Alfred, Miathe, .., ..]. Quelle est votre solution préférée.
Si vous n'avez que quelques centaines de disques, pourquoi ne pas le faire sur le côté du client .. Tout en chargez tout et utilisez JS. Si vous parlez de millions d'enregistrements, utilisez quelque chose comme une personne comme sur un DB est probablement le moyen le plus simple d'obtenir quelque chose qui va échoué. Mais vous obtenez beaucoup de fonctionnalités dans la DB que vous n'utilisez pas.
Pourriez-vous expliquer comment vous avez l'intention de faire automatiquement à l'aide de données côté serveur sans avoir JavaScript côté client?
@JaCob je vais avoir un javascript côté client et je sais comment je peux faire cela. Par exemple yui autocomplete. Dojo autocomplete, etc. Ma question seulement est de quelles sont vos solutions de serveride préférées pour renvoyer les données de l'autocomplete et la performance de la performance (peut-être une référence AB)
Ah, était juste confondu par votre libellé lorsque vous avez dit "Aucun mot de navigation JavaSride de navigateur (YUI / JQUERY / DOJO)." Je suppose que vous disiez que vous n'aviez pas voulu des réponses JavaScript, non pas que vous vouliez un moyen de le faire sans JavaScript.