J’ai une application développée en utilisant le modèle MVC et je voudrais indexer maintenant plusieurs modèles, cela signifie que chaque modèle a une structure de données différente.
Est-il préférable d’utiliser plusieurs index, un pour chaque modèle ou un type dans le même index pour chaque modèle? Les deux façons exigeraient également une requête de recherche différente, je pense. Je viens juste de commencer.
Existe-t-il des différences de performance entre les deux concepts si le jeu de données est petit ou énorme?
Je testerais moi-même la deuxième question si quelqu’un pouvait me recommander de bons exemples de données à cette fin.
Les deux approches ont des implications différentes.
En supposant que vous utilisez les parameters par défaut d’Elasticsearch, avoir 1 index pour chaque modèle augmentera considérablement le nombre de vos fragments, car 1 index utilisera 5 fragments, 5 modèles de données utiliseront 25 fragments; tout en ayant 5 types d’objects dans 1 index va toujours utiliser 5 fragments.
Implications pour avoir chaque modèle de données comme index:
Implications pour avoir chaque modèle de données en tant que type d’object dans un index:
Si vous demandez quelles sont trop de données par rapport à de petites données? En général, cela dépend de la vitesse du processeur et de la mémoire vive de votre matériel, de la quantité de données que vous stockez dans chaque variable de votre mappage pour Elasticsearch et de vos exigences de requête. L’utilisation de nombreuses facettes dans vos requêtes ralentira considérablement votre temps de réponse. Il n’y a pas de réponse simple à cela et vous devrez effectuer un benchmark en fonction de vos besoins.
Bien que la réponse de Jonathan ait été correcte à l’époque, le monde a évolué et il semble maintenant que les personnes à l’origine d’ElasticSearch aient un plan à long terme pour abandonner le support pour plusieurs types:
Où nous voulons aller: Nous voulons supprimer le concept de types d’Elasticsearch, tout en prenant en charge les parents / enfants.
Ainsi, pour les nouveaux projets, l’utilisation d’un seul type par index facilitera la mise à niveau éventuelle d’ElasticSearch 6.x.
La réponse de Jonathan est géniale. Je voudrais juste append quelques autres points à considérer:
Les deux réponses ci-dessus sont géniales!
Je ajoute un exemple de plusieurs types dans un index. Supposons que vous développiez une application pour rechercher des livres dans une bibliothèque. Il y a peu de questions à poser au propriétaire de la bibliothèque,
Des questions:
Combien de livres prévoyez-vous stocker?
Quel genre de livres allez-vous stocker dans la bibliothèque?
Comment allez-vous chercher des livres?
Réponses:
Je prévois de stocker de 50 à 70 k livres (environ)
J’aurai 15 à 20 k livres sur la technologie (informatique, génie mécanique, génie chimique, etc.), 15 k de livres historiques, 10 k de livres de sciences médicales. 10 k de livres sur les langues (anglais, espagnol, etc.)
Recherche par prénoms auteurs, nom de l’auteur, année de publication, nom de l’éditeur. (Cela vous donne l’idée de savoir quelles informations stocker dans l’index)
À partir des réponses ci-dessus, nous pouvons dire que le schéma de notre index devrait ressembler à ceci.
// Ce n’est pas le mappage exact, juste pour l’exemple
"yearOfPublish":{ "type": "integer" }, "author":{ "type": "object", "properties": { "firstName":{ "type": "ssortingng" }, "lastName":{ "type": "ssortingng" } } }, "publisherName":{ "type": "ssortingng" } }
Pour atteindre ce qui précède, nous pouvons créer un index appelé Books et avoir différents types.
Index: Livre
Types: Science, Arts
(Ou vous pouvez créer de nombreux types tels que la technologie, la science médicale, l’histoire, la langue, si vous avez beaucoup d’autres livres)
Une chose importante à noter est que le schéma est similaire mais que les données ne sont pas identiques. Et l’autre chose importante est le nombre total de données que vous stockez.
J’espère que ce qui précède vous aidera à choisir différents types dans un index, si vous avez un schéma différent, vous devriez envisager un index différent. Petit index pour moins de données. gros index pour le big data 🙂