Après optimisation, ES - a réalisé plusieurs milliards de recherches de données - 3 - secondes de retour!,Java Advanced Training Camp Baidu net disk

Programmeur Android Jr. 2021-08-19 21:26:54 阅读数:480

apr optimisation es alis plusieurs

Contexte du projet:

Dans un système d'affaires,Certains tableaux contiennent plus de milliards de données par jour,Selon l'échelle de jour,.Mais l'entreprise est limitée à la recherche quotidienne,EtDBSeul3Données mensuelles(Matériel haute configuration),Le coût de la Sous - bibliothèque est élevé.

Objectif d'amélioration de la version:

**1、**Les données peuvent être consultées tous les mois,Et soutient1Recherche et exportation de données historiques de plus de.

**2、**Requête de données par condition retour en secondes.

Trois、ES Principe de récupération

3.1 À propos deESEtLuceneInfrastructure

En parlant d'optimisation,Doit être capable de comprendre la raison d'être des composants,Pour trouver facilement le goulot d'étranglement,Pour éviter les multiples détours,Commencez parESEn parlant d'infrastructure(Comme le montre la figure ci - dessous:):

Quelques notions de base:

Cluster Contient plusieursNodeGroupe

Node Module de service groupé

Index UnESL'index contient un ou plusieurs fragments physiques,C'est juste un espace de noms logique pour ces partitions

Type UnindexDifférentes catégories de,6.xVous ne pouvez configurer qu'un seultype,Sera supprimé plus tard

Document L'Unit é de données indexée la plus élémentaire,Comme unJSONChaîne

Shards Un fragment est une unit é de travail sous - jacente,Il ne contient qu'une partie de toutes les données,C'est unLucenceExemple (Unlucene L'index contient au maximum 2,147,483,519 (= Integer.MAXVALUE - 128) Nombre de documents )_.

Replicas Sauvegarde fractionnée , Utilisé pour assurer la sécurité des données et partager la pression de récupération

ES Dépend d'un composant important Lucene, L'optimisation de la structure des données est généralement LuceneOptimisation de, Il s'agit d'une unit é de travail de récupération stockée dans un Cluster ,La structure est la suivante:

InLuceneMoyenne, Divisé en index (Entrée) Recherche (Requête)Deux parties, La section index contient: Diviseur de mots、Filtre、 Mapper de caractères Attendez., La section recherche contient Analyseur de requête Attendez..

UnLucene L'index contient plusieurs segments,Unsegment Contient plusieurs documents , Chaque document contient plusieurs champs , Chaque champ est divisé en un ou plusieurs mots term.

AdoptionLukeVue des outilsESDeluceneLes documents sont les suivants, Augmentation majeure idEtsourceChamp:

3.2 Lucene Mise en œuvre de l'index

Lucene La structure des fichiers index est principalement divisée en :Dictionnaire、 Tableau inversé 、 Fichier avancé 、DocValuesAttendez.,Comme le montre la figure ci - dessous::

**Note::** Trier à partir de luceneOfficiellement:

http://lucene.apache.org/core/721/core/org/apache/lucene/codecs/lucene70/package-summary.html#package.description_

Lucene Trois lectures aléatoires du disque prennent du temps .Parmi eux.fdt Grande perte d'espace lors de l'enregistrement des données du fichier ,.timEt.docOui.SSD Le stockage améliore les performances de lecture et d'écriture aléatoires .

Un autre processus qui consomme le rendement est le processus de notation. , Blindage non requis .

À propos deDocValues:

L'indexation inversée résout le problème de la récupération rapide des documents correspondants à partir des mots ID, Mais si vous devez trier les résultats 、Groupe、 Les opérations d'agrégation, etc., doivent être basées sur des documents ID Trouver rapidement la valeur correspondante .

Le coût de l'indexation inversée est élevé : Vous devez itérer sur chaque entrée de mot dans l'index et recueillir dans la colonne du document token. C'est lent et difficile à étendre. : À mesure que le nombre de mots et de documents augmente , Le temps d'exécution augmente également .

Solr docs Ceci est expliqué comme suit: :

For other features that we now commonly associate with search, such as sorting, faceting, and highlighting, this approach is not very efficient. The faceting engine, for example, must look up each term that appears in each document that will make up the result set and pull the document IDs in order to build the facet list. In Solr, this is maintained in memory, and can be slow to load (depending on the number of documents, terms, etc.)

Inlucene 4.0 Adopté avant la version FieldCache, Le principe est qu'en inversant le tableau par colonne, (field value ->doc) Mapping to (doc -> field value)Cartographie, Le problème est que la construction progressive prend beaucoup de temps et consomme beaucoup de mémoire , Facile à créer OOM.

DocValues Est une structure de stockage de colonne , Passage rapide des documents ID Trouver les champs pertinents à trier .

InESMoyenne, Tout est activé par défaut ( En plus du marquage requis analyzed Champ de chaîne pour )Champdoc values, Si vous n'avez pas besoin de trier ce champ, etc. , Peut être fermé pour réduire la consommation de ressources .

3.3 À propos deES Indexation et recherche de tranches

ES Un index est composé d'un ou de plusieurs lucene Composition de l'index ,Unlucene Index par un ou plusieurs segmentComposition,Parmi euxsegment Est le plus petit domaine de recherche .

Sur quelle tranche les données sont - elles stockées? :shard = hash(routing) % numberofprimary_shards

Par défaut routing Le paramètre est un document ID (murmurhash3),Peut passer URLDans _routing Le paramètre spécifie que les données sont réparties dans la même tranche ,indexEtsearch Il faut être cohérent pour trouver les données. .

S'il existe une base claire _routing Partitionnement des données , Réduit la récupération des fragments ,Pour améliorer les performances.

Quatre、 Optimiser les cas

Dans notre cas , Les champs de requête sont tous fixes , La recherche en texte intégral n'est pas disponible , C'est aussi une grande prémisse pour que des milliards de données reviennent en secondes. :

**1、**ES Récupération des champs seulement , Stockage uniquement HBaseDeRowkey Ne stocke pas les données réelles .

**2、** Les données réelles sont stockées dans HBaseMoyenne,AdoptionRowkeyRequête,Comme le montre la figure ci - dessous:.

**3、** Suggestions pour améliorer le rendement de l'indexation et de la recherche , Voir les documents officiels (Par exemple:https://www.elastic.co/guide/en/elasticsearch/reference/current/tune-for-indexing-speed.html)

Certains détails de l'optimisation sont officiellement décrits dans d'autres articles , Dans cet article, seuls quelques éléments clés d'optimisation de ce cas sont présentés. .

4.1 Optimiser les performances de l'index

**1、** Écrire en vrac , Voir la taille de chaque quantité de données , Des centaines à des milliers. .

**2、** écriture multithreadée , Le nombre de fils d'écriture est généralement égal au nombre de machines , Peut être adapté à une variété de situations , Réussir dans l'environnement d'essai Kibana Observer la courbe de performance .

**3、**Ajoutersegments Temps de rafraîchissement pour , En suivant les principes ci - dessus, ,segment En tant que plus petite Unit é de recherche ,Par exemple,segmentOui.50- Oui., Objet à vérifier 10Données, Mais à partir de 50- Oui.segment

Requête séparée 10Article (s),Total500Enregistrement (s), Après le tri ou la comparaison des scores , Couper le premier 10Article (s),Jeter490Article (s). Dans notre cas, “refresh_interval”: “-1” , Une fois l'écriture par lots du programme terminée

Rafraîchir manuellement (Appelez leAPIC'est tout.).

**4、** Allocation de mémoire , Beaucoup d'articles ont déjà mentionné , Pour le système 50% La mémoire de Lucene Faire un cache de fichiers , C'est une lourde tâche. ,Alors...ES Le noeud a besoin de plus de mémoire ( Par exemple, chaque noeud peut être configuré 64G C'est mieux. ).

**5、** Configuration de l'aspect disque SSD, Tableau de disques mécaniques RAID5 RAID10 Même si ça a l'air rapide. , Mais au hasard IOToujoursSSDD'accord..

**6、** Utiliser la génération automatique ID, Utiliser la personnalisation dans notre cas KEY,C'est - à - dire avecHBaseDeROW KEY, C'est pour pouvoir rowkey Supprimer et mettre à jour les données , La dégradation des performances n'est pas évidente .

**7、** À propos de la fusion de segments , Fusionner périodiquement en arrière - plan , Plus gros. segment Ça prendra du temps. , Pour réduire l'impact sur d'autres opérations ( Comme la recherche ),elasticsearch Limite de seuil ,Par défaut20MB/s,

Paramètres configurables :“indices.store.throttle.maxbytesper_sec” : “200mb” ( Ajuster en fonction des performances du disque )

Enfin,Joignez une carte de votre cerveau préparée avant l'entrevue:

image

Il doit y avoir beaucoup de questions avant l'entrevue,Pour faciliter la révision,J'a i partagé une vague d'entrevues personnalisées

  • JavaRegroupement des connaissances de base

image

  • SpringSeau familial(Série sur le terrain)

image.png

Step3:Brosser les questions

Puisque c'est pour une interview,Alors il y a beaucoup de questions à brosser,En fait, après le retour du Festival du printemps,On ne va nulle part,J'a i moi - même écrit beaucoup de questions d'entrevue.,C'est pour ça que j'ai pu le savoir pendant l'entrevue.,En gros, vous comprendrez ce que vous demanderez au cours de l'entrevue.,Quels sont les problèmes à haute fréquence?,Il est donc très important de brosser les questions lors de la préparation de l'entrevue..

Voici ma collection privée de questions d'entrevue:

image

Beaucoup de gens soupirent“Apprendre est inutile”,En fait, la raison pour laquelle la théorie de l'inutilité est née,Parce que ce que je veux ne correspond pas à ce que j'ai appris,Ça veut dire qu'il n'a pas assez appris.Qu'il s'agisse d'études ou de travail,Il devrait y avoir de l'initiative,Donc si vous avez un grand rêve d'usine,Alors essayez de le faire vous - même.

Méthode de collecte des données: JavaEnsemble complet de manuels d'études

Le matériel d'apprentissage ci - dessus est partagé gratuitement,Enfin, je vous souhaite bonne santé,J'ai eu mon cœuroffer!

Copyright:Cet article est[Programmeur Android Jr.]Établi,Veuillez apporter le lien original pour réimprimer,remercier。 https://fra.fheadline.com/2021/08/20210819212523662j.html