YunTable開発日記(11) - BigTableのパフォーマンス最適化(転載)

送信元アドレス:http://peopleyun.com/?p=910

 

伝説のドナルド・クヌースの同級生が一度、(時期尚早の最適化はの根である「時期尚早の最適化は諸悪の根源である」と述べたが、すべての悪)、 基本的には安定したが、製品のコードで、いくつかの最適化を行い、例えば、非常に便利です、私はVistaのDOに基づいてWindows 7とVistaの間のコードベースは非常に似ていますが、それ以外の場合は、わずか30秒を取得するために最適化を処理するために30分かかる、とのマルチスレッド技術を使用していたが、理由のWindows 7非常に多くの最適化、Windows 7のその優れた性能を維持しながら、それが正常にWindows XPを置き換えることができることを保証し、華麗な特殊効果です。BigTableのをいえば、Googleのエンジニアはまた、その性能の最適化技術のためのいくつかを使用し、本論文では、に基づいて行われますBigTableの紙あなたがBigTableのかYunTableのいずれかを持っている場合は、本題にする前に、詳細にこれらの最適化手法のパフォーマンスを分析しますケースに精通し、あなたがクリックすることができ、ここで前にこのシリーズのすべての記事を読むために。

産地グループ

カラム家族グループ(地域グループ)、および局所性錠剤のシステムへの局所性の複数を組み合わせて各グループは別々SSTableを生成します。一緒に統合同様のカラムファミリーの複数を比較することができ、このメカニズムの地域グループ、で、これは2つの利点があります。一つは、例えば、それは約数百柱の人口は、読み出したデータを削減することです大きなテーブル、アドレスを担当するアプリケーションは、唯一の他の情報コラムを読まなく設定に対処するためのローカルグループのために設計されており、タブレット上でこれらのデータを収集するので、クエリ全体の参加を低減することが可能である読み取り機械番号、その他、例えば、App Engineのデータストアは、それによって2PCトランザクション性能が伝統的なメカニズムの弱点を回避する、ローカル・トランザクション・グループにメカニズムを使用することによって達成される、処理速度を高めることであるがBigTableのには適しません。また、ユニットは、ローカルグループにはいくつかの便利なデバッグ・パラメーターを設定することができます。例えば、局所グループは、メモリに格納されているすべてに設定することができます。メモリにロードされたメモリの局所グループSSTableのセットにロードされた不活性サーバポリシーに従って錠剤。読み込みが完了すると、列の地域に属するアクセスグループは、とき家族は、ハードドライブを読む必要はありません。この機能は、データの小ブロックに特に有用であり、頻繁なアクセスを必要とする:Bigtableの内部に、我々は、位置関連性を有するアクセス速度メタデータテーブルの列グループを改善するためにこの機能を使用します。

圧縮

最後に、だけでなく、性能向上の圧縮率も低くなっているので、それがあるため、リレーショナルデータベースの時代では、リレーショナルデータベースの圧縮技術を作り、それが唯一、データベースの列を最後の仕上げと考えますが、ベースとすることができます特に、今日の時代に、CPUの速度とI / Oの伝送速度のメモリ容量よりもはるかに良い9:列列1または近似に一緒に保存されたいくつかのデータは、それが上記の圧縮率で、あるいは1に非常に驚くべきことです有意に非常に大幅に改善された性能を有する減圧するためのCPU時間のわずかな増加を介してデータを読み取って送信するための時間を短縮します。

BigTableのは、また、圧縮機構を使用し、例えば、クライアントは、ローカルグループかどうかを制御できSSTableを圧縮する必要があります。あなたが圧縮する必要がある場合には、どのような形式で圧縮します。各ブロックのSSTableは、圧縮形式が圧縮されている使用してユーザによって指定されています。SSTableで読み出したデータの一部だけ場合、データの部分のみが、ファイル全体を解凍せずに圧縮することができます。BigTableのは、カスタマイズ可能な圧縮2ラウンドを採用しました。最初のパスは、大きな走査窓に長い共通の文字列を圧縮ベントレーとマッキロイのアプローチを使用して、第二の時間、すなわち16キロバイトの小さい走査ウインドウ内の重複データを検索するために、高速の圧縮アルゴリズムを使用することです。2年間およそ2006 X86のハードウェアデバイスで非常に迅速に圧縮アルゴリズム、/秒を100-200MBするように設定した圧縮率のメカニズム、レートは400〜1000メガバイト/秒に達し抽出します。

圧縮アルゴリズムの重要な考慮事項の選択にGoogleのエンジニアではなく、圧縮空間よりも高速であるが、空間におけるこの圧縮性能が二倍の圧縮率は素晴らしいです。たとえば、このモデル空間圧縮比は10にまで達することができる:1。1又は4:3で圧縮され、従来よりこのgzipは良好より1圧縮空間は、「回」圧縮モードが高くなるように、一緒にクラスタ化されているによる類似度データにそれほど効率的です圧縮率、および時間でBigtableの中の同じデータストア複数のバージョンは、圧縮効率が高くなる場合。

読み取り操作をキャッシュすることでパフォーマンスを向上させます

BigTableのは、そのコアメカニズムの一つとして、バッファリングされていないが、キャッシュのパフォーマンスの最適化は、常に銀の弾丸(特効薬)ですが、読み取り操作のパフォーマンスを改善するために、タブレットサーバは、二次キャッシュ戦略を使用しています。スキャンバッファは、キーと値のインターフェースSSTableを介して取得された第1レベル・キャッシュ、メイン・キャッシュサーバ錠剤である、ブロックバッファが第2レベルのキャッシュであり、キャッシュがSSTableブロックGFSから読み出されます。多くの場合、繰り返し同じデータを読み込むアプリケーションでは、それは非常に効果的なスキャンバッファであり、多くの場合、読み出したデータに近いだけで、アプリケーションデータを読み込むために、キャッシュブロックが有用、例えば、シーケンシャルリード、またはホットのローカルグループの列にランダムアクセス異なる列。

ブルームフィルタ

ブルームフィルタ(フィルタ)は、高速データが機構のセットが存在して決定されません。すべてのBigTableのSSTableがタブレット状態を構成するデータの読み出し動作を読まなければなりません。メモリ内のこれらのSSTableない場合は、ハードディスクに繰り返しアクセスする必要があります。この時点で、あなたはたとえば、私たちはブルームSSTableは、特定のデータの行と列を含むフィルタクエリを使用することができ、SSTable自身のブルームフィルタにアクセスすることにより、ハードディスクへのアクセスの数を減らすことができます。特定の用途のために、我々は、少量、ブルームフィルタを記憶するためのメモリのコストを支払って、必要なディスクアクセス数の大幅な削減と引き換えにそれを読んで。アプリケーションの目的は、存在しない行または列にアクセスするときに使用ブルームフィルタも暗黙のうちに、到達時間のほとんどは、ハードディスクにアクセスできるようにする必要はありません。

ログを達成するためにコミット

そのため、各タブレットは別のファイルに属する存在するコミットログならば、それはたくさんのファイルを生成し、これらのファイルを並列GFSで書かれています。これらのファイルが大幅にシステム全体BigTableののパフォーマンスが低下します別のディスクに書き込まれたファイル、ランダムディスク非効率的な操作を大量に、ログインする必要がありますとき、GFS方式は、基本的なファイルシステムサーバーに実装されています。これらの問題を回避するために、我々は、ロギング操作がログファイルに書き込まれ、変更、各タブレットは、ログファイルをコミットための統一サーバを持って自動的に追加されるので、より多くのタブレットのためのログファイルの本当のミックスは、ロギングを変更。

単一のログを使用すると、大幅にシステムのパフォーマンスを向上させることができますが、プットは、作業が煩雑に再開しますが。サーバーの負荷各タブレットのタブレットは非常に少数の元のサーバー:サーバーがダウンしたときのタブレットは、タブレットは、他の多くのタブレットのサーバーに移動されますロードします。タブレット、元のサーバーから新しいタブレットタブレットサーバが抽出して再実行するために書くことと、ログ情報は、状態を復元するために、操作を変更するとき。しかし、これらの変更タブレットのロギング操作は同じログファイルに混在しています。一つの方法は、新しいタブレットサーバが完全なログファイルをコミット読みが、唯一それがタブレットを復元するために、関連する変更を実行するために必要なものを繰り返すものの、ということです。タブレットタブレットサーバにロードされた100台のタブレットサーバ、それぞれが存在する場合、この方法を使用して失敗し、ログファイルには、(各サーバが読むために一度用)100回読まれます。

複数を回避するために注文システムは、第一(シーケンス番号のログ、テーブル、行名)キーワードでログインし、ログファイルを読み出します。ソートした後、同じに伐採タブレット変更操作が継続的に一緒に保存され、したがって、1つのディスクだけシーク動作を、シーケンシャルリードも後。並列ソートのために、最初にソート平行セグメントタブレット異なるサーバの、64メガバイトのセグメントにログインすることができます。彼らは回復タブレットからログファイルをコミットを開始する必要がある場合、タブレットのマスターサーバーで処理を共同するためにこの種の仕事、およびサーバが示しています。

不変性を使用して

生成されたSSTableキャッシュが一定であるよりも、他の部分に加えてBigtableの、SSTableを使用する場合は、我々はシステムを簡素化するためにこれを使用することができます。SSTableからデータを読み込むときにたとえば、システムは、ファイルシステムアクセス動作を同期する必要はありません。これにより、平行線の非常に効率的な動作を実現することができます。memtableは、同時にデータ構造にアクセス読み取りと書き込み操作をすることができます唯一の変数です。、読み出し動作時にメモリテーブルを競合を低減するために、我々は、COW並列に読み出し動作および書き込み可能(コピーオンライト)メカニズムを使用することができます。

「マーク - 削除する」SSTableが一定であるため、そのため、私たちは恒久的に放棄SSTableに翻訳、問題のデータは、「削除」としてマークされているガベージコレクション、使用してマスター・サーバの問題を削除することができ、ガベージコレクションの形をSSTable廃棄物収集SSTableを削除します。

ます。https://www.cnblogs.com/licheng/archive/2010/09/09/1821918.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_34085658/article/details/92626841