ElasticSearchについて知っておくべきいくつかのこと

ESには知っておくべきことがあります

1.それはなんですか?

Elasticsearchは、リアルタイム分散ストレージ、検索、分析エンジンと強力なファジー/関連照会

2.データ構造?

ここに画像の説明を挿入

用語辞書:テキストの段落を入力すると、Elasticsearchはトークナイザー(つまり、図に示すようにAda / Allen / Sara ...)に従ってテキストをセグメント化します。これらのサブワードはまとめてTerm Dictionaryと呼ばれます。ではTerm Dictionary、私たちはその言葉の中になりますので、それは、非常に、非常に多くあるので、ソート、およびので、あなたがでできたときに見つけたい半分確認するために、全体を横断する必要はありません。Term Dictionary

用語インデックス:Term Dictionary単語が多すぎるため、Term Dictionaryすべての単語をメモリに配置できないため、Elasticsearchもスモークレイヤーが呼び出されますTerm Index。このレイヤーは部分的にのみ保存された単語プレフィックスでありTerm Indexメモリに保存されます(特に高速取得が行われます)。Term Indexこれは、FST(Finite State Transducers)の形式でメモリに格納されます。これは、非常にメモリを節約することを特徴としています

投稿:ドキュメントIDが保存されPostingList内部のデータはPostingListフレームオブリファレンス(FOR)エンコーディングテクノロジーを使用して圧縮されディスクスペース節約します

有限状態トランスデューサー:(追加予定)

参照フレーム:(追加予定)

3. ESの一般的な用語は?

インデックス:Elasticsearchのインデックスはデータベースのテーブルに相当します

タイプ:これは新しいElasticsearchバージョンで廃止されました(以前のElasticsearchバージョンでは、1つのインデックスで複数のタイプがサポートされています-メッセージキューの1つのトピックの下にある複数のグループの概念に多少似ています)

ドキュメント:ドキュメントは、データベース内のレコードの行に相当します

フィールド:データベースの列に相当する概念

マッピング:データベースのスキーマに相当する概念

DSL:データベースと同等のSQL(Elasticsearchデータを読み取るためのAPI)

4.ES全体のアーキテクチャ

ESアーキテクチャ(分散型、高可用性)

ここに画像の説明を挿入

ES書き込み

ここに画像の説明を挿入

クラスター上の各ノードはcoordinating node調整ノード)であり、調整ノードは、このノードがルーティングを実行できることを示しますたとえば、ノード1はリクエストを受信しますが、このリクエストのデータはノード2処理する必要があることを検出したため(メインシャードはノード2にあるため)、ノード2にリクエストを転送します

coodinate(調整)ノードは、ハッシュアルゴリズムを介して、どのメインシャード上にあるかを計算し、対応するノードにルーティングできます。 shard = hash(document_id) % (num_of_primary_shards)

メインシャード書き込みプロセス

ここに画像の説明を挿入

  1. メモリバッファにデータを書き込む

  2. 次に、データをトランスログバッファに書き込みます

  3. 1秒ごとにデータがバッファからFileSystemCacheに更新され、セグメントファイルが生成されます。セグメントファイルが生成されると、インデックスを介してクエリを実行できます。

  4. リフレッシュ後、メモリバッファは空になります。

  5. 5秒ごとに、トランスログはバッファからディスクにフラッシュします

  6. FileSystemCacheから定期的/定量的に、トランスログコンテンツflush indexをディスクに結合します

  • Elasticsearchは、最初にデータをメモリバッファに書き込み、次に1秒ごとにファイルシステムキャッシュに更新します(データは、データがファイルシステムバッファにフラッシュされた後にのみ取得できます)。したがって、Elasticsearchによって書き込まれたデータのクエリに1秒かかります
  • ノードのダウンタイムとメモリ内のデータ損失を防ぐために、Elasticsearchはデータの別のコピーをログファイル書き込みますが、初期データはメモリバッファに書き込まれ、バッファは5秒ごとにディスクにフラッシュされます。したがって、Elasticsearchのノードがダウンすると、5秒のデータ失われる可能性があります
  • ディスク上のトランスログファイルが十分に大きいか、30分を超えると、コミット操作がトリガーされ、メモリ内のセグメントファイルがディスクに非同期的にフラッシュされて永続化操作が完了します。

メインシャードが書き込まれた後、データはレプリカセットノードに並行して送信され、すべてのノードが正常に書き込まれると、ack調整ノードに返され、調整ノードはackをクライアントに返して1回の書き込みを完了します。 。

ESの更新/削除

Elasticsearchの更新および削除操作プロセス:対応するdocレコードをマークし.del、削除操作のdelete場合docステータスをマークし、更新操作の場合元のレコードをとしてマークしてdeleteから、新しいデータを書き込みます

前述のように、セグメントファイルは1秒ごとに生成さ、セグメントファイルはますます増えます。Elasticsearchにはマージタスクがあり、より多くのセグメントファイル1つのファイルセグメントにマージされます。

マージの過程で物理的なdelete状態削除されます。doc

ESクエリ

私たちに問い合わせる最も簡単な方法は、2つのタイプに分けることができます。

  • IDに基づいてドキュメントを照会する
  • クエリ(検索用語)に従って、一致するドキュメントをクエリします

IDに基づいて特定のドキュメントクエリするプロセスは次のとおりです。

  • メモリ内のトランスログファイルを取得する
  • ハードディスクからTranslogファイルを取得します
  • ハードディスクからセグメントファイルを取得する

クエリに従ってドキュメントを照合するプロセスは次のとおりです。

  • 同時に、メモリとハードディスクのセグメントファイルをクエリします
  • ここに画像の説明を挿入

上記の書き込みプロセスから、次のことがわかります。Get(IDによるドキュメントのチェックはリアルタイム)、Query(クエリによるドキュメントのマッチングはほぼリアルタイム)

セグメントファイルは毎秒生成されるため

Elasticsearchクエリは、次の3つの段階に分けることができます。

  • QUERY_AND_FETCH(クエリの完了後にドキュメントコンテンツ全体を返します)
  • QUERY_THEN_FETCH(最初に対応するドキュメントIDをクエリし、次にドキュメントIDに従って対応するドキュメントを照合します)
  • DFS_QUERY_THEN_FETCH(最初にポイントを計算してからクエリを実行する)
  • 「ここでは、サブ頻度の単語頻度を参照し、ドキュメント(用語頻度、ドキュメント頻度)はよく知られています。出現頻度が高いほど、相関が強くなります。」

ここに画像の説明を挿入

一般に、最もよく使用するのはQUERY_THEN_FETCHです。最初のタイプのクエリはドキュメントコンテンツ全体を返します(QUERY_AND_FETCH)は、1つのシャードのみをチェックする必要があるリクエストにのみ適しています。

QUERY_THEN_FETCHの全体的なプロセスフローは大まかに次のとおりです。

  • クライアント要求は、クラスター内のノードに送信されます。クラスター上の各ノードは調整ノード(調整ノード)です
  • 次に、調整ノードは検索要求をすべてのシャード(プライマリシャードとレプリカシャードの両方)に転送します。
  • 各シャードは検索結果(doc id)を調整ノードに返し、調整ノードはデータのマージ、並べ替え、ページングなどの操作を実行して最終結果を生成します。
  • 次に、調整ノードはdoc id各ノードによって処理されて実際documentデータプルし、最終的にクライアントに返されます。

クエリフェーズ中にノードが行うこと:

  • 調整ノードは、クエリコマンドをターゲットシャードに送信します(リクエストをメインシャードまたはレプリカシャードに転送します)
  • doc id調整ノードに返されるデータノード(各シャードでのフィルタリング、並べ替えなど)

フェッチフェーズフェーズ中にノードが行うことは次のとおりです。

  • 調整ノードは、データノードから返されたデータを取得し、doc idこれらをdoc id集約しから、キャプチャコマンドをターゲットデータフラグメントに送信します(Docレコード全体を取得したい)。
  • 調整ノードdoc idから送信されたデータに応じて、データノードは実際に必要なデータをプルして調整ノードに返します。

元のアドレス:https://mp.weixin.qq.com/s?__ biz = MzI4Njg5MDA5NA ==&mid = 2247486522&idx = 1&sn = 7b6080756d0711c646fb47d5db49fc97&chksm = ebd74d3bdca0c42d35f7e2097e4fbaca

おすすめ

転載: blog.csdn.net/weixin_41237676/article/details/113374585