原則ES

三つは、クエリのパフォーマンスああを向上させる方法(レベルの十億)大量のデータの場合には、ES?
大量のデータのこのシナリオでは、以前の生産結果の経験に検索ESのパフォーマンスだけでなく、私たちの環境を改善する方法

(1)パフォーマンスの最適化キャッシュキラー--filesystem
OSのキャッシュ、OSのキャッシュ
ファイルに実際に行くためのディスク・ファイルに書き込まれたデータを書き込むためのES、およびディスクのデータを行く自動的にオペレーティング・システム・データの内部中に入るために、OSのキャッシュバッファは、
検索エンジンは、基礎となるファイルシステムキャッシュに大きく依存して、ファイルシステムのキャッシュへのより多くのメモリならば、メモリはすべてINDXセグメントファイルのインデックスデータファイルを収容することができますようにしようESので、あなたは基本的に検索した場合パフォーマンスが非常に高くなり、メモリを取ることです。
パフォーマンスギャップを大きくすることができる、と私たちは、圧力測定の多くをテストする前に、ディスクは、一般的な肯定秒に行くことならば、検索パフォーマンスは間違いなくセカンドレベル、1秒、5秒、10秒です。それはファイルシステムのキャッシュを行くことである場合でも、純粋なメモリ、大きさの順に行くよりも、その後、一般的なディスクパフォーマンスを取って、基本的には数ミリ秒から数百ミリ秒の範囲で、ミリ秒。
学生がある前に、私は彼の検索パフォーマンス、重合性能、転置インデックス、正の屈折率、ディスクファイル、10秒というよう求めてきました。

学生実際のケース

たとえば、あなたは、ESノードは3台のマシン、各マシンを持っている、それはメモリ、64G、総メモリの多くは、と思われる64 * 3 = 192グラム
、各マシンのJVMのヒープは、その後、残りの部分は、ファイルシステムキャッシュに残される、32GであるESに総クラスタファイルシステムのキャッシュに各マシンのみ32グラムは、32 * 3 = 96グラムメモリである
私は彼に尋ねた、データOK、あなたはクラスタESにデータのどのくらいの量を書いたもの?
ディスク上のあなたは、この時点である場合は、あなたの全体の、インデックスデータファイル、3台のマシン上で、1Tの総ディスク容量を占有して、あなたのESデータの量が1トンで、データの量は、各マシンは300グラムです

あなたは、あなたのパフォーマンスは大丈夫ことができると思いますか?ファイルシステムのキャッシュメモリのみ100グラム、あなたはデータ・メモリの10分の1を置くことができ、残りはディスクにあり、その後、あなたが検索操作を実行し、操作のほとんどは、ディスクを取っている、パフォーマンスは確かに悪い
彼らの状況はこのようなものです、ESにする場合テスト、3台のマシンを取得し、かなり良い、64Gメモリ物理マシンを感じます。私は、彼らが1Tのデータ量を保持することができると思います。

最終的に、あなたはあなたのマシンのメモリであり、あなたはデータの総量の少なくとも半分を収めることができ、ESのパフォーマンスが優れているようにする最善のケースを持って
、あなたより、たとえば、あなたが1T ESに格納されたデータを合計したいですマシンは、一緒に統合ファイルシステムのキャッシュメモリを残して、少なくとも例512G、少なくとも半分まで、検索は、メモリを取ることです、一般的に数秒、2秒、3秒、5秒にパフォーマンス
最良のシナリオの場合我々は戦略を持っていたように、私たち自身の生産の経験の下で、それは存在は、あなたが、左のファイルシステムのキャッシュメモリを検索するために、これらのインデックスを使用したい少量のデータをESのみである、それはあなたがして、100Gでありますそれは100ギガバイト、同等内で制御され、ほとんどすべてのデータのメモリを検索するために行く、パフォーマンスは1秒よりも一般的に小さい、非常に高いです。

たとえば、あなたが今、データの1行持っている
id名の年齢.... 30のフィールド
あなたが検索になりましたが、が、あなただけのid名の年齢によって三つのフィールドを検索する必要がある
でしょう、あなたは年をESにデータの行を記述した場合、すべてのフィールド愚か70%がデータの原因を検索するために使用されていない、結果は単にファイルシステムのキャッシュESマシン上のスペースを取り、データを白羽データの量が多いほど、それはcahceが少ないデータキャッシュできるファイルシステムにつながると述べた
だけで書くよりをいくつかのフィールドを取得するために使用されるESは、例えば、ESのID名の年齢にそれに3つのフィールドが書かれていることができ、その後、あなたは他のフィールドを置くことができますmysqlのデータ内に存在する、我々は一般的にESを使用することをお勧めします+このようなフレームワークのHBase。
HBaseの機能は、大量のデータのオンラインストレージに適用可能であり、つまり、HBaseのは、複雑な検索をしない、膨大な量のデータを書き込むことができ、それは上のIDまたは範囲に基づいて、いくつかの非常に簡単な操作を、このようなクエリを実行することです

ESから検索するための名前と年齢が、結果は、ID DOC 20を取得し、その後、それぞれ対応するDOC IDの完全なデータを照会するためにチェックアウトし、ドキュメントによると、先端に戻るHBaseのIDを行くかもしれません。
エスあなたは、データは、好ましくは以下、またはファイルシステムのキャッシュメモリのESよりもわずかに大きい書き込み
、その後、クエリで返されたIDのHBase ES、検索データ20に基づいて、次にあなたがES 20msのから取得するためにかかることがありますあなたがプレイするかもしれないので、それはまた、1Tデータは、ESを入れて、各クエリは、5〜10秒であるだろう、オリジナルの30ミリ秒を過ごすことが、今、各問い合わせは50msのある、高性能になります。
他の人がデータをHBaseの年を入れて検索する必要はありません、または; elastcisearchほとんどそこにあるデータ書かれたES ESマシンのファイルシステムキャッシュの量で試すことができますのみ検索するいくつかの重要なフィールドを置くために使用されるデータの量を減らしますmysqlの。
一部の学生にも尋ねた前ので、私はまた、100のフィールドがあり、これまでESとして、検索に使用する必要があります保存されているデータは、たとえば、あなたが今、データのコピーを持っていることを彼らに言った、実際には、唯一の10分野を検索するための、図10は、推奨されるデータフィールドで、ES、残りの90個のデータフィールドに、あなたは、mysqlののHadoop HBaseのを置くことができ、することができ
、そう、少量のデータ、データフィールド10をES、メモリを置くことができますそれは、検索IDの一部を検索するために使用され、IDは、MySQLのデータの詳細を照会するためのHBaseを経ます

(2)データの予熱を
あなたが言うならば、あなたは上記の方式でそれを行う場合でも、クラスタES内の各マシンに書き込まれたか、ファイルシステムのキャッシュを超えるデータの量は、例えば、あなたがマシンデータの60グラムを書き、倍増しました結果のファイルシステムの30グラム、30グラムのキャッシュや、データがディスク上に残っています。
例えば、彼らは言う、マイクロブログは、あなたはいくつかの大きなVを置くことができ、通常、ブラシ熱データを検索するために先に進められ、バックエンドシステム、すべての瞬間、あなた自身のバックオフィスシステムに独自のデータの多くの人々を参照してくださいユーザーが実際にこのホットデータを見たとき、彼らはメモリから直接検索し、すぐにされているバック、ファイルシステムのキャッシュにアクセスしてください。
電気供給者が、あなたは通常、iphone 8などの一部の商品のほとんどを見ることができ、先にバックグラウンドデータの熱が前方にプログラムを置くために、自らのイニシアチブで毎分のアクセス時間は、ブラシファイルシステムキャッシュは行きます。
あなたがホットだと思うデータについては、多くの場合、誰かが訪れ、それは、熱データは、一度しばらくで、事前に訪問し、ファイルシステムのキャッシュにデータが内部に行くことにしましょうよ特別な事前キャッシュ・サブシステムを行うのがベストです。そのような人は、次の訪問を楽しみにして、パフォーマンスが良くなることを確認してください。

(3)高温と低温の分離
フィールドの数は、店舗や他のスプリットに行くを検索する前に、ESのパフォーマンスの最適化、データ分割に、私は言っていない、これはサブサブライブラリーMySQLのテーブルの私の最後の話の裏に似ています垂直解像度。
MySQLのスプリットレベルのようなものを行うことができますESは、それは、小さな、非常に低い周波数の多数のデータにアクセスする単一のインデックスを作成し、その後、別のデータアクセスが頻繁に不快指数で書きます
、あなたがより良い寒データもホット予熱された後のデータを確実に別の不快指数にデータを書き込み、その後、インデックスを書き、そして、寒さのデータを洗い流すために聞かせていない、彼らは内部のファイルシステムのOSのキャッシュに滞在させてみてください。

見て、あなたが6機、2つのインデックス、放冷したデータ、熱データ、各インデックス3シャードがあると
3台のマシン発熱インデックスデータ; 3、さらにインデックスデータを放冷機
とこれが事実であるが、あなたは、ほとんどすべては、高性能の熱がありますが、データへのアクセスを確保することができ、内部のファイルシステムキャッシュ内のデータの量が少なくて、この時点で、データの総量のおそらく10%ホットデータインデックス、熱データにアクセスする際に多くの時間を残りますA。
しかし、寒さのデータのために、他の指標である、不快指数とのデータがもはや同じマシンで、私たちはお互いに何のタッチを持っていません。誰かが風邪データを訪れる場合は、ディスク上のデータをたくさんすることができ、パフォーマンスハンデその場合には、人々の10%が風邪データを訪問するために行く、人々の90%は、暑さの中でデータにアクセスします。

(4)ドキュメントモデルの設計
二つのテーブルがあり、多くの学生は、MySQL、私に尋ねるがある
のid order_codeのTOTAL_PRICE:受注テーブル

1テスト注文5000
申込表:上記ID ORDER_ID goods_id purchase_count価格。
1 1 1 2000年
2 1 2 5 200を

私は、SELECT ONのorder.idはWHERE order.id = 1 = order_item.order_id ORDER_ITEM参加*、年間のmysql注文からある
1つのテスト順序1 1 1 2 2000 5000
1回のテストの注文50002125200の
方法でESに遊び、一度パフォーマンス一般的には非常に良くないと、使用しないようにしよう、複雑なクエリ構文内のESの関連する複雑なクエリ
データモデルの設計、ES

書き込み-ESながら、インデックス、インデックス順、OrderItemのインデックスに2
ID TOTAL_PRICE order_codeが含まれているためインデックス、
に書き込まれたOrderItemのインデックスは、完全な、IDのorder_codeのTOTAL_PRICE番号ORDER_ID goods_id purchase_count事業に参加する価格

JavaシステムのESは、データが直接良いESに関連付けられて記述され、関連付けが完了すると、書き込み、検索時には、検索するために参加を達成するために検索構文ESを使用する必要はありません
文書モデルのデザインは、多くの、非常に重要です操作は、唯一の検索時に様々な操作の複雑な混乱を実行する必要はありません。操作をサポートするために、ESはESとの悪い運転を検討していない何かをするほどです。書き込みが完了すると、あなたは本当に、可能な限り時にドキュメントモデルの設計、操作のようなものを持っている場合。ネストされた、参加、親子の検索は避けなければならないような非常に複雑な操作の一部に加えて、パフォーマンスが悪いです。

多くの学生が私に尋ねる、いくつかの操作の複雑な混乱の多くは、どのように実行する
2つのアイデア、検索/照会時間、強くビジネスの数に関連し、実行すべき、特に複雑な操作を:
1)、データの書き込み時に、それが設計されています良いモデルに加え、いくつかのフィールド、フィールドが処理されたデータを書き込み、プラスの内部
のような彼らのJavaプログラムパッケージで)2、ES、Javaプログラムを実行するデータを、探し出し、ESで行うのですか、我々はいくつかの特に複雑な操作のJavaパッケージで、ESに基づいて、言います

(5)パフォーマンスの最適化タブ
ページには、比較的ESピットがあるので、なぜそれから?ページあたり10のデータであり、あなたは今、100ページで照会したい場合は、5を持っている場合の例を与えるために、実際には、1000年前に、各シャードに格納されたデータは、コーディネータノード上で見つけただろうシャードは、その後、5000のデータ、その後、コーディネーター・ノードこれらの5000のデータマージ処理の一部、およびそのデータの100ページの最後の10に到達しています。
分散、あなたはデータの100ページの10をチェックする必要があり、あなたは2つのデータをチェックするために5シャード、各シャードからであると言うことはできませんか?最後に、コーディネータノードは、10のデータにマージ?あなたは、100ページ内のデータを取得するために、もう一度、最後のページにすべてのデータをチェックし、各シャードのために1000年から来た、その後、必要に応じて並べ替えられ、スクリーニングなどの操作する必要があります。
あなたは、ページをめくる各シャードのデータが返されるより、より深く、より長いコーディネータノードの処理をオンにします。非常にピットの父。ですから、もっともっとゆっくり、引き返すでしょう、ESで改ページを行います。
我々はまた、ページの数十は、基本的にデータのページをチェックアウトして10秒に5から行くとき、ターン10の後に、ページングとして数十ミリ秒に最初の数ページをESを使用して、この問題が発生する前に

1)ソート/ページングデフォルトの深さ、悲惨なパフォーマンスの深さを許可しない
、さらに悪いパフォーマンス彼は、午後には、デフォルトが深く回すので、深いページをめくることができません、あなたのシステムのを

2)お客様の声でアプリに似ては、のページの後にページをドロップダウンしていき
、ドロップダウンブラシマイクロブロギング、同様のマイクロブログのページでページを磨く、あなたがAPIをスクロールすることができ、自分のBaiduの
スクロールは、あなたの一時間を与えるだろうすべてのデータのスナップショットを生成し、各ページ内でカーソルを移動すると、このようnextnextそれは高性能のたくさん言うページの種類よりもパフォーマンスを得ることです
。この問題については、次のスクロールを使用することを検討することができます処理のために、原則スクロールを維持することは、実際にデータのスナップショットで、その後、一定時間内に、あなたが同様のマイクロブログを閲覧している際に、フリップを後ろにスライドし、絶えずページを下にリフレッシュしていきます。そして、次のデータへの連続アクセスでカーソルをスクロールし、このパフォーマンスは、実際のESページよりもはるかに良い、非常に高いです。
しかし、唯一のことは、これは同様のマイクロブログのプルダウンフリップの種類に適しており、シーンの任意のページにジャンプすることはできません。スクロールは、時間のスナップショットの期間のデータを保持することですが、ユーザーが常に数時間を有効に反転されていないことを確認する必要があります。
どんなに、基本的には、ミリ秒の性能を回すどのように多くのページを
スクロールAPIは、1ページのみ次のターンであり、第1の10ページを入力し、言うことができないので、その後、58に戻って120に行くんとすることはできませんバウンスページ。だから今、多くの製品が、あなたは、プルダウンページでページをめくるあなたが行うことができるだけで、いくつかのサイトがあり、ランダムに反転するアプリをされて許可されていません


第四に、どのような展開アーキテクチャES生産クラスターはありますか?データの量は、各インデックスはおよそどのくらいですか?どのように多くのスライスに関する各インデックス?
あなたが本当にESを行っている場合、あなたは確かにあなたの実際の生産状況ESクラスタ、複数のマシンの展開を知っていますか?どのように多くのインデックス?各インデックスのデータのどのくらいの量?どのように多くのスライスへの各インデックス?あなたは確かに知っています!
あなたが本当にしなかった場合は、単にような何かを言うために行くときしかし、本当のない、私はあなたに基本的なバージョンを教えてくれ、
私たちは5台のマシンを展開(1)ES生産クラスターを、各マシンは、6コアでありますクラスタは、総メモリ320Gで64Gは、
(2)当社ES増分データクラスタは2000万日で、500メガバイト程度の毎日の増分データ月、毎月の増分データは、15G約600百万円であります。現在、このシステムは、数ヶ月のために実行されている、と今データESクラスタの総量は100G程度と考えられます。
(3)ラインを、5つのインデックス(あなた自身のビジネスを組み合わせ、データがESを置くことができるか自分の目で確かめてください)、各インデックスは約20gであるので、その中のデータの量、私たちのそれぞれのデータの量は現在ありません屈折率分布は8シャード、デフォルト5つのシャードよりもさらに3つのシャードです。

 

まず、ESの分散アーキテクチャの原則は、(ESは、分散ああを達成するためにどのようにされて)それについて言うことができますか?
elasticsearchデザインコンセプトは、分散型検索エンジンですが、それはLuceneの下部に付いたままです。
核となるアイデアは、複数のマシン上で複数のプロセスのESのインスタンスを起動し、ESクラスタを形成することです。
データの基本単位でES今、あなたが注文ESでいくつかのデータを格納したい、あなたはorder_idx、インデックスのESを作成する必要があり、例えば、インデックスに格納され、すべての注文データはこのインデックスの内側に行くために書かれている、インデックスそれはほとんどのテーブルでのMySQLのと同じです。インデックス- >タイプ- >マッピング- >ドキュメント- >フィールド。
インデックス:テーブルでのmysqlの
タイプ:mysqlは、外出先で比較することはできません、あなたは複数のタイプを持つことができ、インデックスは、フィールドの各タイプは似ていますが、若干の違いがあります。
これは、索引があるというようなものであるためデータを置くために専用されているためインデックス、です。いくつかの受注は、仮想財の受注は、ゲームカード、プリペイド再充電が言ったように、あなたはMySQLのテーブルに建てられたというような、いくつかの受注は、靴のペアを衣服の一部を言うような、物理的な商品の注文です。フィールドのほとんどのこれらのラインは同じですが、フィールドの小さな部分は、いくつかのわずかな違いがあるかもしれません。
それは順序インデックスになり、2種類の構造は、物理的な財受注のタイプで、仮想財受注のタイプがあり、2つのほとんどのフィールドが同じ型で、フィールドの数が少ない同じではありません。
多くの場合、インデックスはおそらくタイプだったが、それは状況の指標、複数の種類がある場合、あなたはテーブルインデックスのタイプと考えることができ、それぞれのタイプに固有の中で特定のmysqlを表していると言うんテーブル
各タイプを使用すると、特定のタイプのテーブルであると思われる場合、インデックスが属する同じタイプのより多くの種類を表し、マッピングはテーブル構造のこのタイプの定義で、マッピングを持っている、あなたは、MySQLでテーブルを作成して、確かにこれは、各フィールドがどのようなタイプで、フィールド何があるテーブル構造を定義することです。
マッピング定義テーブルは、このタイプの構造、各フィールドの名前で、この種の定義、フィールドの種類を表しており、この分野の様々な構成があり
ますが、実際のインデックスへの書き込みは、その中の種類データは、複数のフィールドがあり、各文書の行でMySQLのテーブルの代わりに、文書、文書と呼ばれ、各フィールドは、フィールド内でこの文書の値を示し
、その後、あなたは、インデックスを取得し、このシャードインデックス、各断片データ記憶部を複数に分割することができます。
そして、このデータの破片が実際につまり、複数のバックアップを持っている、各シャードは、データを書き込む責任プライマリー断片を、持っていますが、いくつかのレプリカのシャードがあります。プライマリー断片データ書き込み後、データは他のアップ、いくつかのレプリカシャードに同期されます。
スキームのこのレプリカを通じ、各シャードは、マシンがダウンした場合、他のマシンが行う上でのデータの他のコピーがあり、ああ問題ではありません、データの複数のバックアップを持っています。それの可用性。
ES複数のクラスタノードは、一つのノードは自動的に、このようなメンテナンス・インデックス・メタデータのプライマリー断片とレプリカのシャードのアイデンティティプルを切り替えるための責任を引き、などのような、マスターノードは、実際にいくつかの管理作業を行っている、マスターノードとして選出されます。
マスターノードがダウンした場合、そのノードがマスターノードとして再選されます。
非マスターノードがダウンした場合、それがダウンして他のマシン上のレプリカのシャード節転移のあるプライマリー断片のアイデンティティように、マスターノードによるであろう。あなたはそのマシンのダウンタイムを修正するために急いでいる場合は、再起動後、マスター制御ノードは、後続の変更のデータ同期と同様に、過去に複製シャード分布を失われますので、正常に戻ってクラスタ化します。
実際には、上記分散型検索エンジン、基本的なアーキテクチャの設計としてelasticsearchあります


第二に、何がああデータで書かれた作品をES?何は、ESクエリデータがああある作品?
(1)データの書き込み処理をES

1)クライアントノード過去にリクエストを送信し、ノードは、ノード(コーディネータ・ノード)調整して選択
2)調整ノードを、文書のルーティングに、(プライマリー断片がある)は、対応するノードに要求を転送し
、実際のノードで3)プライマリを次いで、データは、レプリカ・ノードに同期される破片の処理要求、
4)調整ノードのすべてのレプリカノードとプライマリノードがケリされた後、それが見つかった場合、結果がクライアントに応答して返されます

(2)ESデータの読み出し時

クエリは、データ、書かれた文書の一部をGET、この文書は自動的にドキュメントIDによると、上記対応するプライマリー断片をハッシュするためにルーティングすることも、グローバルに一意のID、ドキュメントIDを割り当てますが、提供します。また、このような順序ID、ユーザIDと同じように、手動のドキュメントIDを指定することができます。

あなたは、ドキュメントIDで問い合わせることができハッシュドキュメントIDに基づいて行われます、シャードからの問い合わせを作るために、シャードは、上記行くためにドキュメントIDを割り当てると判断されました

1)クライアントは、任意のノードに要求を送信し、ノードの座標になる
ラウンドロビンアルゴリズムランダムポーリング、プライマリー断片および全てそのレプリカを使用して、対応するノードにこの時間は要求を転送し、経路座標文書ノード上)2読み出し要求されたロード・バランシングするように、ランダムに選択されている
3)ノードが要求を受信したノードに文書座標を戻し
ノード座標)。4クライアントに文書を返します

(3)ESデータ検索処理

ES最も強力な全文検索を行うことですあなたは3つのデータを持っていると言うことです

ああ本当に楽しいJavaの
懸命Javaはああ学ぶために
、J2EE、特に牛を

あなたがキーワードのjavaで検索する、Javaはアウト検索する文書が含まれています

ああ学ぶことはとても難しいのjava本当に楽しいああ、Javaの:ESはあなたのリターンを得られます

1)クライアントは、座標ノードへ要求を送信する
こともでき、ノード検索要求を調整する)2に対応するプライマリー断片の断片又は複製断片の全てに転送される
各々は、実際には(ドキュメントIDの一部を、その検索結果をシャード:3)クエリフェーズは)、及びコーディネータノードに戻り、データがマージソート、ページングおよび他の操作調整ノードによって、最終結果を出力
4)相をフェッチ:調整ノード続いて、各ノードにドキュメントIDに基づいて、実際の文書データを引っ張って、最終クライアントに返さ

基本原理(4)検索逆索引、図は、従来のデータベースと転置インデックスの差示す
https://www.jianshu.com/p/3abaa0083bacを


(5)データの基本原理書く
1)最初の書き込みバッファ、バッファ内のデータが検索未満であり、データがログファイルのトランスログに書き込まれている間
、バッファがほぼいっぱい、または特定の時間にある場合2)、彼らは次のようになりますバッファのデータはなく、直接セグメントファイルのディスク・ファイルに、この時点で、新しいセグメントファイルにデータを更新しますが、最初のOSのキャッシュを入力します。このプロセスは、リフレッシュすることです。
1秒ごとに、データバッファが新しいセグメントファイルに書き込まれるES、毎秒は、新しいディスクファイル、セグメントファイルを生成します、このセグメントファイルが書き込ま1つの、第2のバッファに最近のデータに保存されています
しかし、バッファ場合、当然のことながら、第二のための空のセグメントファイルを作成し、わずかにリフレッシュ動作を実行しないこの時点でデータが存在しないデータ・バッファ、デフォルトのリフレッシュ動作を実行するために1秒、新しいセグメントファイルにブラシがある場合
データがディスクファイルに書き込まれる前に、実際には、OSのキャッシュと呼ばれるディスクファイルの何かを持っている、オペレーティングシステムは、あるオペレーティング・システム・キャッシュは、それが最初のメモリキャッシュにオペレーティングシステムレベルに入る前に、OSのキャッシュを入力します、と言って
バッファ内に限り、データを検索することができるデータの代わりにリフレッシュ操作、OSのキャッシュにブラシを、である
それはESと呼ばれているのはなぜリアルタイムに近いのですか?NRT、ほぼリアルタイム、ほぼリアルタイム。デフォルトでは、毎秒リフレッシュ時間でデータを見ることにするために、1秒後に書かれているのでそう、準リアルタイムのES。
APIのAPI、またはJavaを介して安らかESは、手動でリフレッシュ動作を実行するために、データ・バッファは、データがすぐに見つけることができるように、手動で、OSのキャッシュにブラッシングすることです。
バッファにコピーするために、ディスクに永続化しているトランスログ内のデータを保持するために必要とされていないため、限りデータは、OSのキャッシュに入っているように、バッファがクリアされます
3)限り、データは、OSのキャッシュに入ると、あなたはこのセグメントを作ることができますがファイルデータが提供する外部の検索
4)の繰り返しは、新しいデータ・バッファおよびトランスログを入力していき、手順1〜3をそれぞれが空、トランスログに予約をバッファリフレッシュ終え、行きバッファーと新しいセグメントファイルにデータを書き込むしていきます。このプロセスの進展に伴い、トランスログはどんどん大きくなります。トランスログが一定の長さに達すると、それはコミット操作をトリガーします。
バッファ内のデータは、すべての非常によく、1秒毎に行くために、OSのキャッシュブラシで、バッファを空にしました。したがって、このバッファデータは、メモリのESプロセスを埋めていない保持することは常に可能です。
たびにデータ書き込みバッファ、ログが行くトランスログログファイルに書き込まれているので、これはトランスログログファイルはますます大きくなっており、ある程度のログファイルtranslogのとき、コミット操作を実行する一方。
5)動作は、最初のステップを発生するリフレッシュバッファデータ内のOSのキャッシュ、空のバッファの前でコミット
コミット・ポイントに対応する全てのセグメントファイルを識別する点、コミット。6)ディスクファイルに書き込まれる
強制)7ディスクファイルのfsyncへのOSのキャッシュ現在のすべてのデータ
ファイルを記録TRANSLOG何が役割ですか?これは、マシンが失われた全データをメモリ上で、死んで一度やOSキャッシュは、バッファメモリであるかどうか、あなたがコミット操作を実行する前に、バッファ内のデータがにとどまるか、OSのキャッシュ内にとどまるのいずれか、です。
もう一度再起動するときには、マシンがダウンしている時間後に特別なログファイル、ログファイルのトランスログに対応するデータの書き込み動作に必要である、ESトランスログは自動的にログファイル内のデータを読み込み、バッファメモリ、OSに復元されますどこへ行くのキャッシュ。
コミット:;アップディスクに、2強力なブラシのfsync OSのキャッシュデータを、ポイントをコミット書き、1 3、ログファイルのtranslogクリア
8)を既存のトランスログの空、再度トランスログを有効に再起動し、コミット操作が完了します。デフォルトでは、30分には、自動的にコミットを実行しますが、トランスログが大きすぎる場合は、すべてのトリガをコミットします。全体は、フラッシュ操作と呼ばれるプロセスを、コミット。私たちは、手動でフラッシュ操作を行うことができ、それはディスク・ファイルへのすべてのOSのキャッシュデータを磨くことです。
コミット操作、フラッシュ操作と呼ばれていません。ESフラッシュ操作では、コミットのプロセス全体に対応しています。我々はまた、APIをESができ、コミット・ポイント、空のトランスログログファイルを記録し、強力なブラシまでのfsyncディスクにキャッシュして、手動で手動でOSのデータをフラッシュします。
9)トランスログのOSキャッシュは、実際にデフォルトでは、データの多分5秒間だけ、OSのキャッシュバッファやトランスログファイルのままになりますので、この場合は、ディスクに移動するにはまず、デフォルトのブラシは、5秒ごとに1回書かれていますマシンがハングアップしたときに、私はデータの5秒を失いました。しかし、このパフォーマンスが優れている、データの5秒まで失います。トランスログはまた、直接ディスクへのfsyncにする必要があり、それぞれの書き込み動作に設定することができますが、パフォーマンスが非常に悪くなります。
インタビュアーは、あなたが言う、実際には、ESはほぼリアルタイム、データが1秒検索した後に書き込むことができる最初でインタビュアーを魅了するために質問のESはデータを失う、あなたはここにできるかを尋ねていない場合は実際にあなたがここにいます;あなたは、データ、データとデータの5秒を失うバッファ内に残っている、トランスログOSのキャッシュ、セグメントファイルも OSのキャッシュ、ディスク上のデータの5秒があり、ダウンタイムが5秒になります場合は、この時点で、ではありませんデータの損失。
あなたは、データを失ってはならないしたい場合は、Baiduのを見て、パラメータ、公式文書を設定することができます。データのすべての部分が書かれているトランスログがディスク上に書かれている間、バッファに書き込まれているが、それはスループットは大きさの順序をドロップします書き込み、書き込み性能を引き起こす可能性があります。もともと第二は、2000年を書くことができ、そして今、あなただけの可能性があり、第二のための200を書き込むことができます。
10)削除操作場合は、ドキュメントの状態を削除済みとしてマークされますれる.delファイルを生成しますコミット時、そうれる.delに応じてファイルを検索するときにドキュメントが削除された知っている
、それは更新操作の場合)11を、つまり、オリジナルのドキュメントを削除状態としてマークされ、その後、新しいデータを書き込む
12)バッファが毎回リフレッシュし、それがセグメントファイルが生成されます、デフォルトは1であるように、第2セグメントファイル、セグメントファイルは、より多くなり、これを定期的にマージ実行する
複数のセグメントファイルが物理的に除去するために、DOCが削除済みとしてマークされ、その後、ディスクに書き込まれた新しいセグメントファイルであろうが、そこにし、一つにマージされるときに、各マージ)13コミット・ポイントを作成し、すべての新しいセグメントファイルを識別し、検索に使用するセグメントファイルを開き、古いセグメントファイルを削除します。
書き込み処理でESは、リフレッシュの基礎となる4つのコアコンセプトがあり、フラッシュ、トランスログ、マージ
ある程度マルチセグメントファイルは、ESが自動的にマージ操作をトリガするときに、複数のセグメントファイルは、セグメントファイルにマージします。

 

おすすめ

転載: www.cnblogs.com/muzinan110/p/11105731.html