Comprendre les Segments D'Elasticsearch

je suis sous l'hypothèse que chaque fragment dans Elasticsearch est un indice. Mais j'ai lu quelque part que chaque segment est un indice de Lucène.

Qu'est-ce qu'un segment? Comment cela affecte-t-il les performances de recherche? J'ai des indices qui atteignent environ 450 Go de taille tous les jours (j'en crée un nouveau tous les jours) avec les paramètres Elasticsearch par défaut.

quand j'exécute curl -XPOST "http://localhost:9200/logstash-2013.03.0$i_optimize?max_num_segments=1", j'obtiens num_committed_segments=11 et num_search_segments=11.

les valeurs ci-dessus ne devraient-elles pas être 1? Peut-être que c'est à cause de index.merge.policy.segments_per_tier valeur? Qu'est-ce que ce niveau de toute façon?

33
demandé sur ksindi 2013-03-15 10:52:13

1 réponses

le mot "index" est un peu abusé dans Elasticsearch -- s'applique à trop de choses.

Pour expliquer:

index

un "index" dans Elasticsearch est un peu comme une base de données dans un DB relationnel. C'est là que vous stockez/indexez vos données. Mais en fait, c'est exactement ce que votre candidature voit. À l'interne, un index est un namespace logique qui pointe vers un ou plusieurs fragments.

aussi, "indexer "signifie" mettre " vos données dans Elasticsearch. Vos données est à la fois stockés (pour la recherche) et "indexé" pour la recherche.

index inversé

un "index inversé" est la structure de données que Lucene utilise pour rendre les données consultables. Il traite les données, sort des termes uniques ou des jetons, puis enregistre quels documents contiennent ces jetons. Voir http://en.wikipedia.org/wiki/Inverted_index pour plus d'.

tesson

un "éclat" est un exemple de Lucène. Il est entièrement fonctionnel moteur de recherche dans son propre droit. Un "index" pourrait consister en un seul fragment, mais se compose généralement de plusieurs éclats, pour permettre à l'indice de grandir et d'être répartis sur plusieurs machines.

un "fragment primaire" est le principal support d'un document. Un "fragment réplique" est une copie du fragment primaire qui fournit (1) un basculement au cas où les matrices primaires et (2) une augmentation du débit de lecture

segment

Chaque fragment contient plusieurs "segments", où un segment est un index inversé. Recherché dans un fragment va rechercher chaque segment à son tour, puis combiner leurs résultats dans les résultats finaux pour ce fragment.

pendant que vous indexez des documents, Elasticsearch les recueille en mémoire (et dans le journal des transactions, pour la sécurité) puis toutes les secondes environ, écrit un nouveau petit segment sur disque, et "rafraîchit" la recherche.

cela rend les données dans le nouveau segment visible à la recherche( i.e. ils sont "searchable"), mais le segment n'a pas été fsync'ed à disque, est donc toujours à risque de perte de données.

de temps en temps, Elasticsearch "chasse", ce qui signifie fsync'ing les segments, (ils sont maintenant "engagés") et la suppression du journal des transactions, qui n'est plus nécessaire parce que nous savons que les nouvelles données ont été écrites sur le disque.

plus Les segments sont de plus chaque recherche prend. Ainsi, Elasticsearch fusionnera un certain nombre de segments de taille similaire ("niveau") en un seul segment plus grand, au moyen d'un processus de fusion de fond. Une fois la nouvelle plus grand segment est écrit, les anciens segments sont supprimés. Ce processus est répété sur les segments plus grands quand il y en a trop de la même taille.

124
répondu DrTech 2014-11-12 00:37:41