フェニックスのパフォーマンスの最適化で一般的に使用される手段



Phoenix Performance Optimization Commonly Used Means



1.テーブルの最適化

塩漬けは中国語で塩を意味します。本質は、hbase行キーバイト配列の最初のバイト位置にシステム生成のバイト値を設定することです。このバイト値は、主キー行キーによって生成されたバイト配列のハッシュです。アルゴリズム、計算。その後、ソルティングはデータをさまざまな領域に分散できます。これは、フェニックスの同時読み取りおよび書き込み操作に役立ちます。

例:



CREATE TABLE TEST (HOST VARCHAR NOT NULL PRIMARY KEY, DESCRIPTION VARCHAR) SALT_BUCKETS=16

事前分割これは、HBaseの事前パーティションです。フェニックステーブルを作成するときに、事前パーティション化する値を正確に指定できます。
例:

CREATE TABLE TEST (HOST VARCHAR NOT NULL PRIMARY KEY, DESCRIPTION VARCHAR) SPLIT ON ('CS','EU','NA')

複数の列ファミリーを使用すると、フェニックス表を作成するときに列が配置される列ファミリーを指定できます。
例:



CREATE TABLE TEST (MYKEY VARCHAR NOT NULL PRIMARY KEY, A.COL1 VARCHAR, A.COL2 VARCHAR, B.COL3 VARCHAR)

データ量が多いテーブルで圧縮アルゴリズムを使用して、GZ、lzoなどのパフォーマンスを向上させます。
例:

CREATE TABLE TEST (HOST VARCHAR NOT NULL PRIMARY KEY, DESCRIPTION VARCHAR) COMPRESSION='GZ'

2.セカンダリインデックス

フェニックスのセカンダリインデックスは、バージョン2.1からの可変および不変データ(データ挿入後に更新不可)をサポートします。以前のバージョンは不変データのみをサポートしていました。現在使用しているバージョンは2.2.2で、セカンダリインデックスをサポートしています。いくつかの実験を行うことができます。

渡すことができるexplain select … sqlの実行時にphoniexがセカンダリインデックスを使用するかどうかを確認します。




3.並列

Phoenixは、集約されたクエリを複数のスキャンに分割し、これらのスキャンをPhoenixのカスタムhbaseコプロセッサーに割り当てます。これは、サーバー側で並行して実行して、クエリのパフォーマンスを向上させることができます。バランスの取れた分割テーブルは、フェニックスが効率的なクエリを取得するための最も重要な要素の1つであり、同じサイズのパーティションを異なるリージョンサーバーに均等に分散することも含まれます。このツールは、hbaseテーブルパーティションの監視に役立つリンクの説明を追加します。テーブル内のデータは、各フェニックススレッドによって処理されるデータの量が等しくなるように、リージョンサーバー全体に均等に分散されるため、クエリの待機時間が短縮されます。

クライアント側で渡すことができますphoenix.query.targetConcurrency phoenix.query.maxConcurrencyでクエリがスキャンを分割する方法を制御します。並列クエリは、クエリスキャンのセグメンテーションをテーブルデータの領域セグメンテーションに合わせることが好ましい。スキャンが非常に不均一な場合、大量のデータを使用してパーティションスキャンを処理するには、複数のスレッドが必要です。

並列スキャンを実行するときのセグメンテーションポイントは、次のように定義されます。
t:同時ターゲットの数です
m:同時実行の最大数です
r:スキャンするパーティションの数です

if r >= t Use the region boundary of the table Else if r/2 > t Split each region into s parts, s satisfies the formula: s = max(x) x satisfies s * x

クライアントマシンのコア数とクラスターのサイズに応じて調整できます。phoenix.query.threadPoolSizephoenix.query.queueSizephoenix.query.maxConcurrencyphoenix.query.targetConcurrencyの値でより多くのスレッドが許可されます待ち時間を短縮するために並列クエリを実行します。

しかし、この方法には制限があります。最大の問題は、フェニックスが地域を分割するのに十分な情報を持っていないことです。クエリ結果が多くのリージョンにまたがる場合、リージョン内には常に同じサイズのリージョンがいくつか存在するため、これは問題ありませんが、クエリに含まれるリージョンが少ない場合は、問題が発生する可能性があります。


からの転送: http://outofmemory.cn/code-snippet/7879/Phoenix-performance-tuning