6. フェニックスに関するよくある質問

1. テーブルのプレカット方法

プレカットテーブルは、カット値を指定することにより、事前に分割された各領域の分割点を参照することで、単一点の過熱の問題を効果的に回避します。


create table test
(id integer primary key, 
name varchar,
age integer,
address varchar) split on (10, 20, 30, 40)
#split后为切割点

上記により 5 つの領域が作成され、行キーの範囲は次のようになります。
領域 1: 行キーの最初の 2 桁は min~10
領域 2: 行キーの最初の 2 桁は 10~20
領域 3: 最初の行キーの 2 桁は 20 ~ 30
領域 4:行キーの最初の 2 桁は 30 ~ 40
領域 5:行キーの最初の 2 桁は 40 ~最大

2. 圧縮を指定して大きなテーブルのパフォーマンスを向上させる


create table test
(id integer primary key, 
name varchar,
age integer,
address varchar) split on (10, 20, 30, 40),COMPRESSION='GZ'
#split后为切割点

3. アプリケーションは Phoenix JDBC 接続プールを使用しますか?

接続プールの使用は推奨されません。Phoenix の接続オブジェクトは、最下層が Hbase の接続であるため、ほとんどの JDBC 接続とは異なります。Phoenix 接続オブジェクトは、より細かく、より安価に作成できるように設計されています。Phoenix の接続が再利用される場合、基になる HBase 接続が前のユーザーによって常に正常な状態に保たれるとは限りません。より良いアプローチは、潜在的な問題を確実に回避するために、新しい Phoenix 接続を作成することです。

4.書き込みの最適化

upsert を使用して大量のデータを書き込む場合は、自動コミットをオフにして、小さなバッチで送信してください。

try (Connection conn = DriverManager.getConnection(url)) {
  conn.setAutoCommit(false);
  int batchSize = 0;
  int commitSize = 1000; // 每一批提交数.  
  try (Statement stmt = conn.prepareStatement(upsert)) {
    stmt.set ... while (there are records to upsert) {
      stmt.executeUpdate(); 
      batchSize++; 
      if (batchSize % commitSize == 0) { 
        conn.commit(); 
      } 
   } 
 conn.commit(); // commit the last batch of records 
 

注: シン クライアントでは、クライアントとサーバーへのクエリの RPC の数が最小限に抑えられるため、executeBatch() を使用することが非常に重要です。

5. RPC インタラクションを削減する

Phoenix には、テーブルの設計時にテーブルレベルのパラメータ UPDATE_CACHE_FREQUENCY が​​あります。この値は常にデフォルトです。これは、すべての SQL クエリが最初にメタデータをリクエストすることを意味します。これにより、リクエストのプレッシャーが増大し、パフォーマンスに一定の影響を及ぼします。

テーブルを作成するときに、このパラメータを同期する頻度を指定することをお勧めします。

CREATE TABLE IF NOT EXISTS test_user (
id VARCHAR NOT NULL PRIMARY KEY,
username VARCHAR  ,
phoen VARCHAR  ,
addr  VARCHAR,
times bigint)  UPDATE_CACHE_FREQUENCY = 900000;
#客户端应每15分钟检查表或其统计信息的更新


#修改已有表
alter table 表名 set UPDATE_CACHE_FREQUENCY = 时间(毫秒)。

おすすめ

転載: blog.csdn.net/lzzyok/article/details/119705101