ESに関しては、私は何か言わなければなりません。

ESとは?ESを選ぶ理由

高速に検索できる高パフォーマンスの非リレーショナル ドキュメント データベースです。

        自然に分散:高性能、高可用性、簡単な拡張、簡単なメンテナンス

        クロスプラットフォームおよびクロス言語:主流のプログラミング言語をサポート

        構造化ストレージ、地理的位置情報ストレージをサポート

        膨大なデータの全文検索

        サポートログシステム

ES の逆指数とは何ですか? データ構造はどうなっていますか?

逆索引は、実際には文書全体の索引を後ろに置き、文書から抽出されたコンテンツを前に置きます。

例:今、静かな夜、ベッドの前の明るい月明かりに考えて、詩を入力してください

従来のフォワード インデックスの格納形式は次のとおりです。

インデックスは先頭にあり、たとえば、インデックスには月光が格納され、詩全体がドキュメントに格納されます。

この時点で、ユーザーはインデックスを介して月光を検索できます.たとえば、ユーザーがベッドを検索する前に、明らかにすべてのドキュメントを照会します.

数万の詩がある場合、クエリの効率は低くなります。

転置インデックスの格納構造は次のとおりです。

        詩全体を入力すると、入力時に文書 ID が生成され、他の詩にも独自の文書 ID があり、入力後、索引エンジンに従って各詩のキーワードが抽出され、キーワード辞書が形成されます。 mysql の B+ ツリーによって実装されます。

        このように、ユーザーがキーワードで検索すると、最初にキーワードが見つかり、そのキーワードを使用してこれらのデータが含まれるドキュメントを見つけます。

        しかし、多くのキーワードがある場合、ディスク上で IO 操作を実行することは明らかにパフォーマンスを消費するものです。

        しかし、データ量が多すぎてメモリに格納できないため、キーワード インデックスの概念が導入されています。

        キーワード インデックスはメモリに格納されます. キーワード辞書の要約部分が格納されます. 主にいくつかのキーワードのプレフィックスが格納されます. 最下層はトライ ツリーによって実装されます. 単語の組み合わせはツリーを形成するために格納されます.ユーザーが検索すると、実際にツリーからキーワードに一致します.各キーワードが一致した後、値が取得されます.この値は、キーワード辞書ツリー内のキーワードの位置です.次に、B+ツリーの特性に従って単語を探します.単語を見つけたら、対応するドキュメント ID を取得し、ドキュメント ID を使用して、このキーワードが保存されている詩を見つけます。

ES の中心的な概念は何ですか?

1. インデックス: ドキュメントの集まりで、mysql のライブラリの概念に相当します. 識別するために一意の名前が付けられています. インデックスを操作する場合は、その名前を使用する必要があります.

2. ドキュメント: ドキュメントは、従来のデータベースの行の概念に相当します. ES では json データで表されます. mysql でデータの行を挿入することは、ES でドキュメントを挿入することと同じです.

3. フィールド: mysql の列に相当し、ES の json データのキーとして理解できます。

4. マッピング: マッピングは、各フィールドのタイプに対して定義されます。

5. シャーディング: インデックスが大きすぎると、スペースを占有し、クエリの効率に影響します. シャーディングを使用すると、各シャードのインデックスにデータを格納することを意味します.

6. コピー: シャードが配置されているサーバーに障害が発生し、使用できなくなったと仮定すると、この状況を解決するために、コピーの概念が導入され、各シャードには独自のコピーがあります。

7. 単語: 転置インデックスを使用して、大きなテキストを多数の小さな単語に分割して保存します。

8. 設定: デフォルトのシャード数やインデックス数など、インデックスを設定します。

9. アナライザー: ES は、ドキュメントを保存するときにドキュメントを分析します. アナライザーには、文字フィルター、トークナイザー、用語プロセッサが含まれています.

10. ノードとクラスタ: ES のプロセスで、ES を起動するとノードが起動し、多くのノードがクラスタを形成します。

ドキュメントの索引付けのプロセス?

       ステップ 1: クライアントは、クラスター内のノードにデータを書き込む要求を送信します。

        ステップ 2: ノード 1 はリクエストを受け取り、ファイル ID を使用してドキュメントがシャード 0 に属していることを判断します。このとき、リクエストは他のノード 2 に転送されます。このとき、シャード 0 のプライマリ シャードが割り当てられます。ノード 3。

        ステップ 3: ノード 3 はプライマリ シャードで操作を実行します. 成功した場合, ノード 1 と 2 のサブシャードにリクエストを転送します. 実行が成功するとノード 1 に応答し, ノード 1 は結果を返します.

並行性の下でデータの一貫性を確保するにはどうすればよいですか?

        1. バージョン番号を介してオプティミスティック同時実行制御を使用して、新しいバージョンが古いバージョンによって上書きされないようにし、アプリケーション層が特定の競合を処理するようにすることができます。

        2. さらに、書き込み操作の場合、整合性レベルは quorum/one/all をサポートし、デフォルトは quorum です。つまり、ほとんどのシャードが使用可能な場合にのみ書き込み操作が許可されます。ただし、それらのほとんどが利用可能であっても、ネットワークなどの理由でコピーへの書き込みに失敗する可能性があるため、コピーに障害があると見なされ、別のノードでシャードが再構築されます。

        3. 読み取り操作の場合、レプリケーションを同期 (デフォルト) に設定できます。これにより、プライマリ フラグメントとレプリカ フラグメントの両方が完了した後に操作が返されます。レプリケーションを async に設定した場合は、検索要求パラメーター _preference をプライマリに設定することもできます。プライマリ シャードにクエリを実行して、ドキュメントが最新バージョンであることを確認します。

ES はどのように選挙を実施しますか?

ステップ 1: マスターノード候補の数が、elasticsearch.yml で設定された基準値に達していることを確認する

discovery.zen.minimum_master_nodes;

ステップ 2: 比較: まず、マスター資格があるかどうかを判断し、候補マスター ノード資格が最初に返されます. 両方のノードが候補マスター ノードである場合、より小さい ID を持つ値がマスター ノードになります.

ES にはどのようなトークナイザーがありますか?

        標準:単語ごとにセグメント化されたデフォルトのトークナイザーは、大文字と小文字を処理できます

        キーワード:入力はセグメンテーションなしで直接出力されます。

        パターン:通常のルールに従って処理されます

        言語: 30 を超える一般的なトークナイザーを提供します

        顧客:カスタムトークナイザー

ES でのマッピングとは何ですか?

   マッピングは、データベースのテーブル構造定義スキーマに似ており、次の機能があります。

        インデックス内のフィールドの名前を定義する フィールドのデータ型(文字列、数値、ブール型フィールドなど) を定義し、逆インデックスの関連構成 (インデックスを作成しないようにフィールドを設定するなど)、レコード位置などを定義します。初期バージョンのES , インデックスの下 はい, 複数のType が存在する可能性があります. 7.0以降, インデックスにはType が1 つしかありません. TypeにはMapping定義があるとも言えます.

 

ES の集計クエリとは何ですか?

        バケット集約: grupby に似ています

        インジケーターの集約:一般に、計算、平均化、および合計に使用されます

        パイプライン集計:クエリ結果のサブクエリに相当する、集計結果の二次集計

ES はどのデータ型をサポートしていますか?

        文字列: テキストキーワード

        数字:in、float、double

        日にち

        ブール値

        バイナリ

        間隔

        地理的位置        

書き込みパフォーマンス チューニング?

        読み取りと書き込みの間のリソース プリエンプションを減らし、読み取りと書き込みを分離する

        大量のデータ書き込みは、可能な限り取得要求が少ない時間帯に制御する必要があり、大量の書き込みバッチは集中的に処理する必要があります。

        フラッシュ時間を増やし、IO 操作の頻度を減らす

        refresh_interval の値を増やし、セグメントの作成を減らして fullGC を減らします

パフォーマンス チューニングを読み取りますか?

       スワップを無効にする

        クエリの代わりにフィルターを使用する

        ディープ ページングを避けます。データ量が多い場合は、scorll 検索または検索後を使用します。

        インデックス間の結合を避ける

ESのノードタイプ?

       マスターノード

        候補ノード

        投票ノード

        データノード

        コールドノード

        ホットノード

ディープページングとは?

 例: 4 つのシャードに分散された 40 個のデータがあり、ページ 1 で 10 個のデータを要求するとします。

サイズからのデフォルトのページングを使用してページングを実装する場合、要求が調整ノードに最初にヒットすると仮定すると、調整ノードは 4 つのフラグメントに移動して、並べ替えのために 40 個のデータすべてをフェッチし、並べ替え後に最初の 10 個を取得します。データの量が少ない場合、問題はありません。データの量が多すぎる場合、これは時間のかかるプロセスです。

深いページネーションの回避策:

スクロール トラバース クエリ: スクロール クエリ。マウス ホイールを使用してスクロールし、Web サイトを閲覧するときに次のページの効果を表示するのと同様です。

クエリの後に検索: すべてのクエリは逆方向であり、順方向クエリはサポートされていません。

タオバオ:ページジャンプ機能を削除し、一度に最初の100ページだけに戻る

ES断片化戦略?

バージョン 7.x より前では、デフォルトは 5 つのシャードと 1 つのコピーであり、バージョン 7.x 以降では、1 つのシャードがコピーに対応します。

シャードとそれ自体のシャード レプリカが同じノード上にあることを許可しない

シャードは可能な限り複数のノードに分割されますが、均等に分散されることはありません

同じノードに複数のシャードが存在する

インデックスの作成時にシャードが割り当てられる レプリカはいつでも割り当て可能

 

 

おすすめ

転載: blog.csdn.net/weixin_43195884/article/details/129129497