6. Häufig gestellte Fragen zu Phoenix

1. So schneiden Sie den Tisch vor

Die Vorschnitttabelle bezieht sich auf den Teilungspunkt jedes vorpartitionierten Bereichs, indem sie den Schnittwert angibt, wodurch das Problem der Überhitzung einzelner Punkte wirksam vermieden wird.


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

Dadurch werden 5 Regionen erstellt, und der Bereich des Zeilenschlüssels ist:
Region 1: Die ersten beiden Ziffern des Zeilenschlüssels sind min~10.
Region 2: Die ersten beiden Ziffern des Zeilenschlüssels sind 10~20.
Region 3: Die erste Die beiden Ziffern des Zeilenschlüssels sind 20–30.
Region 4: Die ersten beiden Ziffern des Zeilenschlüssels sind 30–40.
Region 5: Die ersten beiden Ziffern des Zeilenschlüssels sind 40–max

2. Geben Sie die Komprimierung an, um die Leistung großer Tabellen zu verbessern


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

3. Verwendet die Anwendung den Phoenix JDBC-Verbindungspool?

Es wird nicht empfohlen, einen Verbindungspool zu verwenden. Das Verbindungsobjekt von Phoenix unterscheidet sich von den meisten JDBC-Verbindungen, da die unterste Ebene die Verbindung von Hbase ist. Phoenix-Verbindungsobjekte sind so konzipiert, dass sie feiner und kostengünstiger herzustellen sind. Wenn die Verbindung von Phoenix wiederverwendet wird, wird die zugrunde liegende HBase-Verbindung vom vorherigen Benutzer möglicherweise nicht immer in einem fehlerfreien Zustand gehalten. Ein besserer Ansatz besteht darin, eine neue Phoenix-Verbindung einzurichten, um sicherzustellen, dass potenzielle Probleme vermieden werden.

4. Schreiboptimierung

Wenn Sie Upsert zum Schreiben großer Datenmengen verwenden, deaktivieren Sie die automatische Festschreibung und übermitteln Sie sie in kleineren Stapeln.

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 
 

HINWEIS: Bei Thin Clients ist es sehr wichtig,executeBatch() zu verwenden, da die Anzahl der RPCs für den Client und die Abfrage des Servers minimiert wird

5. Reduzieren Sie die RPC-Interaktion

Phoenix verfügt beim Entwerfen einer Tabelle über einen Parameter auf Tabellenebene UPDATE_CACHE_FREQUENCY. Der Wert ist immer standardmäßig, was bedeutet, dass jede SQL-Abfrage zuerst Metadaten anfordert, was den Druck der Anforderung erhöht und einen gewissen Einfluss auf die Leistung hat.

Es wird empfohlen, beim Erstellen einer Tabelle anzugeben, wie oft dieser Parameter synchronisiert wird, z

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 = 时间(毫秒)。

Supongo que te gusta

Origin blog.csdn.net/lzzyok/article/details/119705101
Recomendado
Clasificación