0、碑文
究極の目標のElasticsearchパフォーマンスの最適化:クールなユーザー体験。
クールの定義 - よく知られている製品寧梁は、かつて人々が喜びの状態と呼ばれて会うとき、人が不快に満足されることはありません、それは中を見た人は、一度に即座に満足を得れば模索し始めます」、と述べました。この気持ちはクールです!」
Elasticsearchクールなポイントは次のとおりです。速く、正確かつ完全な!
などElasticsearchのパフォーマンスの最適化、アリ、テンセント、Jingdongは、Ctripの、ディディ、58、についての詳細な実用的な作業の多くを持っていた、非常に良い参考です。この双Elasticsearchベース思考の電車のための記事、およびパフォーマンスの最適化に関連する議論。
1、クラスタの計画と最適化の実践
データプランの目標量に基づいて1.1クラスタ
早期の事業では、頻繁にSSDために、いくつかのクラスタのノード、メモリ、どのくらいのCPU、またはしないように、質問をしましたか?
考慮すべき主なポイントは以下のとおりです。データ・ストレージの量は、あなたの目標はどのくらいですか?逆推力装置のノード番号を標的とすることができるデータの量。
バッファ容量はさておき1.2を設定します
注:Elasticsearch警告レベル3のライン、ディスク使用率が85%、90%、95%に達します。
異なる行が異なる警報レベル緊急対応戦略を持っています。
あなたが望む選択を含むこのポイント、ディスク容量計画、。85%の制御下で合理的です。
もちろん、それはまた、設定によって調整することができます。
1.3 ESクラスタノードと他のビジネス機能は、マシンを再利用しないようにしてください。
メモリが非常に大きい場合を除き。
例:普通のサーバは、メモリやその他の問題のうち、バインド業務データ、大量の後には、MySQL +のRedisのES +をインストールします。
SSDディスク1.4を選択するようにしてください
Elasticsearch公式文書には、確かに、アカウントの費用の理由を考慮して、SSDをお勧めします。これは、ビジネス・シナリオの組み合わせを必要とし、
ビジネスは書くためにならば、あなたは、検索レート要件の高いレートを持つSSDディスクを使用することをお勧めします。
アリのビジネスシーンでは、SSDディスクは機械的なハードディスクのレートよりも5倍高速昇進しました。
しかし、ビジネスシーンに別のが原因。
1.5メモリ構成が合理的であると
公式推奨:ヒープメモリのサイズは、公式のアドバイスがあるさ:最小(32ギガバイト、インストールRAM / 2)。
Medclと木が明確に叔父がとても大きく32/31ギガバイトを提供するために必要な、と言われて、それが推奨されます:熱データセット:26ギガバイト、寒データ:31ギガバイト
全体のメモリサイズには特定の要件ではありませんが、それは確かに大きいコンテンツ、より良い検索性能です。
参照のための経験:200ギガバイト+ビジネスシナリオ増分データ、一日あたりのメモリのサーバーべき少なくとも64ギガバイト
JVMに加えて、メモリは十分なものでなければならない、またはだろうしばしばOOM禁じます。
1.6 CPUコア数が小さすぎではありません
そして、CPUコアの数は、ESThreadプールが関連付けられています。そして、書き、関連する検索性能を持っています。
推奨事項:16の+核。
1.7スーパーミドル級のビジネスシナリオ、クラスタ間の取得を検討
滴、CtripのPB +のビジネスシナリオ、または基本的にクラスタ全体で取得する必要はありません:順序のような非常に大きなビジネス、されていない限り。
1.8ないクラスタノードの奇数
ES内部クラスタ通信を維持する、分散配備機構の飼育係に基づいていない、そのため、奇数。
効果的にスプリットブレインを回避するために、候補マスタノード/ 2 + 1の数、ただしに設定する値はdiscovery.zen.minimum_master_nodes。
1.9最適化配信ノードタイプ
クラスタノード<= 3は、推奨される:真、データ:真のすべては、マスターノード。両方のマスター・ノードは、ノードルーティングされます。クラスタノード:> 3、必要なビジネスシナリオに基づいては、それが推奨されます:マスターノード/ルーティングノードの段階的な独立性とコーディネート。
1.10は、ホットとコールドデータの分離することをお勧めします
熱データ記憶SSDと機械的ディスク通常の履歴データ格納、検索効率が物理的に改善します。
2、インデックスの最適化の実践
サブライブラリーサブテーブルにMySQLおよびその他のリレーショナルデータベース。Elasticserachはその後も考慮しなければなりません。
どのように多くのインデックス2.1を設定しますか?
ビジネスシナリオに基づく推奨ストレージ。
サブチャネルインデックスストレージに異なる種類のデータ。例:収集された情報を格納するために、ほぼほとんど知らインデックスを知っている; APP APPは、情報がインデックスに格納されて回収されます。
どのように多くのスライス2.2セット?
データの量を測定することを推奨。
経験は:各断片のサイズは30ギガバイトを超えてはならないことをお勧めします。
セットプレーの2.3数?
クラスタ内のノードの数の推奨サイズ、スライスの数が推奨さ> =クラスタ・ノードの数。
5ノードのクラスタは、5つのフラグメンテーションがより合理的です。
注意:操作のインデックスを再作成なければ、フラグメントは、改正することができません。
設定のコピーの2.4数?
銀行システム:システムの頑健性は、次のような異常に高い要件を、持っていない限り。2つ以上のコピーを考えてみましょう。
それ以外の場合は、十分なコピー。
注:コピー数は構成することにより、いつでも変更することができます。
2.5次のインデックスに複数の種類を作成しないでください
あなたは5.Xバージョンであっても、将来のバージョンではスケーラビリティをたどるへのアップグレードを検討してください。
推奨事項:インデックスはタイプに対応しています。6.xの対応するデフォルト_DOC、あなたが直接、統一されたドキュメントを対応入力5.xの。
日付別2.6計画の指標
業務量の増加、およびデータの量によって単一のインデックスは、著名な矛盾に急増しました。
インデックス日付計画によると、不可避な選択です。
メリット1:秒を削除履歴データを達成することができます。あなたは、インデックスの履歴を削除することができます。注意:インデックスがdelete_by_query + force_merge操作を必要とする場合、遅くて不完全な削除。
メリット2:簡単に最近ではホット&コールドデータ管理、データ検索を分離するために、高速の直接物理的な力で指定したインデックスに対応する日付!
操作参考:テンプレート+ロールオーバーAPIを使用。
2.7エイリアスを使用してください
ESインデックス名のMySQLの尊敬を変更しません。エイリアスは、比較的柔軟なオプションです。
3.データモデルの最適化の実践
3.1デフォルトのマッピングを使用しないでください
マッピングは、自動識別システムのデフォルトのフィールドタイプです。前記デフォルトに文字列タイプ:テキストとキーワードタイプ。あなたのビジネスは、セグメンテーション、検索を必要としない場合は、唯一の完全一致が必要とされ、それだけで、キーワードを設定することができます。
浮動小数点オプション:ビジネスは、スペースを節約し、精度を向上させる、などでしょう、に基づいて適切なタイプを選択する必要があります。
3.2選択プロセスのフィールドをマッピング
3.3右のワードブレーカを選択
一般的なオープンソースの中国語の単語が含まれています:IKのトークナイザ、ansjトークナイザ、hanlpワード、口ごもるワード、大規模なトークナイザ、「ElasticSearch最も完全なワードコンパレータおよび使用方法」を、コントラストを参照して検索します。
あなたはIKを選択した場合、我々はik_max_wordをお勧めします。なぜなら:きめ細かいik_smartの粗粒の基本的な結果の結果を含む単語。
3.4日付、長い、またはキーワード
あなたがタイムラインに基づいて分析を行う必要がある場合は、ビジネスニーズに応じて、あなたがタイプとデートしなければなりません。
あなたが第2のレベルにのみ返却が必要な場合は、キーワードを使用することをお勧めします。
図4に示すように、データが実際に最適化するように書かれています
4.1秒の応答かどうか?
本当の本質に近いElasticsearchは次のとおりです。データを書き込ん最速1秒を照会することができます。
1秒にREFRESH_INTERVALセットは、セグメントの多くを生成するためにバインドされている場合、検索のパフォーマンスが影響を受けることになります。
したがって、非リアルタイム転送大きなシーンが30代に設定することができ、さらには-1。
書き込み性能を向上させるためにコピーを減らすために4.2。
書き込む前に、コピー数が0に設定されています、
書き込み後、コピーの数が元の値に設定されています。
4.3バッチは、単一を書き込むことはできません
キューのサイズを結合するバッチ・インターフェース・バルク、バッチサイズ、キューサイズとCPUコアの数とマシンのスレッドプールサイズ。
4.4スワップを無効にします
Linuxシステムでは、一時的に交流を無効にするには、次のコマンドを実行して:
1sudoするswapoff -a
図5に示すように、実際の検索最適化重合
5.1ワイルドカードファジーマッチを無効にします
データより高い結核+を達成するための後、ワイルドカードは、マルチフィールドの組合せの場合に妨害する傾向があり、さらにはダウンしているクラスタノードの崩壊につながります。
結果は悲惨である可能性があります。
別の方法:
スキーム一つ:高精度ソリューションの要件:2枚のトークナイザmatch_phrase検索を使用して、標準およびIKを結合、結合。
オプション2:match_phraseとスロップ組み合わせたクエリによって、IK単語提案:以下厳しいの精度の代替のために。
試合マッチを使用して5.2非常に少ない確率
中国の試合の試合結果は明らかに不正確です。ビッグビジネスシナリオは、フレーズ一致「match_phrase」を使用します。
合理的な単語辞書、シソーラスと組み合わせて、検索結果がノイズデータを避けるために、より高い精度を行いますmatch_phrase。
5.3バインディングビジネスシナリオ、フィルタを使用してフィルタの数が多いです
関連性スコアシーンを計算を使用しないため、間違いなくフィルタ・キャッシング機構は、高速検索を行いません。
例:ZIPコード番号をフィルタリングします。
5.4結果と戻り、フィールドをコントロールします
そして、事業開発などのMySQLのクエリは、選択*操作はほとんど必要ありません。
同様に、ESで、フィールド全体を返す_SOURCEすることは非必須です。
_sourceリターンでフィールドを制御するには、唯一のビジネス関連のフィールドを返します。
Webページのテキストコンテンツ、ページのスナップショットは、ビジネスでおそらく設計上の欠陥バルク戻り、同様のフィールドをhtml_content。
明らかに、集計フィールドではなく、傍受処理後コンテンツを問い合わせるので、事前に記述する必要があります。
5.5ページング深クエリとトラバーサル
ページングクエリは使用しています:+サイズから。
使用したトラバーサル:スクロール;
使用して並列トラバーサル:スクロール+スライス。
業務用の裁量のコレクションの選択。
5.6サイズの重合の合理的なセット
重合結果は不正確です。あなたのサイズを設定しない限り、それ以外の場合は重合の結果は、各スライストップ要素の大きさのために統合されソートされた値を取ることです、32乗-1に2です。
実際のビジネスシナリオは、正確なフィードバックの結果は、に注意を払う必要があります必要があります。
重合結果の全額を取得しないようにしてください - 取るのTopN重合結果の値は、ビジネス・レベルから非常に合理的です。それが本当に意味することにより、結果値の一種ではありませんので。
合理的な重合タブを達成するために5.7
重合結果を表示すると、重合ページング後の問題に直面するためにバインドされ、そしてES公式のパフォーマンス上の理由は、集約ページをサポートしていません。
あなたはページの後に集約する必要がある場合、我々は、自己実現を開発する必要があります。含むがこれらに限定されません:
プログラム:重合の結果を取るには、ページメモリのリターンを得ました。
オプションII:達成バインディングコレクションRedisの後にスクロールスクロール。
6、ビジネスの最適化
Elasticsearchはそれが得意で何をやってみましょう、逆インデックスに基づいて検索で優れていることは明らかです。
運用レベルでは、ユーザが心配ではなく、操作の束「と標準化を書式設定、フィールド処理」の途中で、早く彼らが望むような結果を見たいです。
Elasticsearchより効率的な検索候補を作成するには:
1)「前戯」のために働きます
抽出フィールド、方位解析、分類/クラスタリング、ESを書く前に、ETLステージ上の相関決定。
2)「寝服」プロダクトマネージャー
ビジネスシナリオの素晴らしい様々な、さまざまなに基づいて、プロダクトマネージャーは、不当な要求に言及することがあります。
する技術として、「理由でそれらを啓発愛情を知らせる、」検索エンジンは、Elasticsearch原理は、彼らが実際にある、何ができるかを理解するためにプロダクトマネージャーを説明し、「彼の妾を行うことはできません。」
7まとめ
実際のビジネス開発、企業は一般的に、馬が食べることができないたく必要速い馬を実行したいです。
Elasticsearch開発のための十分なハードウェアリソース(CPU、メモリ、ディスクがいっぱいです)の性能を向上させるためにほとんどない方法です。
重合を取得することに加えて、「弾性それのように遅く、ないよう速い。」ElasticsearchはNより関連、無関係な仕事をしてから結論付けてみましょう
あなたは同様のシナリオがある場合は気にして出てきますか?
ハードウェアリソースが比較的NBある提供し、すべての準備作業を取る、Elasticsearch進行する光を聞かせて、私はあなたがElasticsearchも飛ぶだろうと信じて!