Autocomplete avec java, Redis, Recherche élastique, Mongo
Je dois mettre en œuvre un autocomplete avec plus de 500 000 noms qui peuvent augmenter par la suite à plus de 4 millions de noms.
Backend est un appel de service web java REST avec Spring. Dois - je utiliser MongoDB , Redis ou ElasticSearch pour le stockage et l' interrogation / recherche les noms?
Ceci est une recherche très important cas d'utilisation et MongoDB et Redis sont très bons pour les recherches à base de clés et ne pas utiliser à des fins de recherche, alors que ElasticSearch est un moteur de recherche distribuée, construite spécifiquement pour un tel cas d'utilisation.
Avant de choisir le système, vous devez savoir comment votre fonction fonctionne en interne et en dessous de la contrepartie de ce choix.
exigences non fonctionnelles pour votre fonction
- Quel serait le total pas de requêtes de recherche par seconde (QPS)?
- Comment vous fréquemment à jour les documents (par exemple noms dans votre exemple).
- Quel est le SLA après les noms de mise à jour et à venir dans le résultat de recherche?
- SLA pour vos résultats de recherche.
Certaines exigences fonctionnelles.
- Comment autocomplete devrait ressembler, préfixe, infixe recherche sur les noms?
- Minimum le nombre de caractères utilisateur doit taper, avant de leur montrer les résultats de saisie semi-automatique.
- À quelle fréquence les exigences ci-dessus peuvent changer.
documents indexés ElasticSearch dans l'index inversé et les ouvrages sur les jetons de match (qui peut être facilement adapté pour répondre aux besoins d'affaires), donc super rapide dans la recherche. Redis et MongoDB ne sont pas avoir cette structure interne et ne doivent pas être utilisés pour ce cas d'utilisation et vous ne devriez pas avoir de doute de choisir ElasticSearch sur ces pour mettre en œuvre Autocomplete.
Comme autocomplete est l' une des caractéristiques les plus importantes, il y a un excellent blog , que vous devriez lire pour comprendre les différentes approches proposées par Elasticsearcg et leur compromis.