O LindormTable utiliza uma estrutura de armazenamento Log-Structured Merge-Tree (LSM-Tree). Obter a contagem exata de linhas exige uma varredura completa da tabela — quanto maior a tabela, mais demorada será a operação. Evite executar operações COUNT com frequência.
Lindorm
As diferenças entre a contagem exata e a contagem estimada de linhas em uma wide table do Lindorm são as seguintes:
|
Contagem exata de linhas |
Contagem estimada de linhas |
|
|
Método de estatística |
Varre toda a tabela para obter a contagem precisa de linhas. |
Obtém metadados diretamente no nível do arquivo; portanto, o resultado pode diferir do tamanho real da tabela. |
|
Desempenho da estatística |
Conclusão demorada, com alta carga adicional durante execução simultânea. |
Conclusão rápida, com baixa carga adicional durante execução simultânea. |
|
Cenários aplicáveis |
Ideal para cenários como verificação de dados antes e depois da migração. |
Recomendado quando a página da aplicação precisa exibir a tendência de alteração do tamanho da tabela. |
Métodos para obter a contagem exata de linhas de uma wide table
Use os métodos abaixo para obter a contagem exata de linhas de uma wide table. Escolha o método mais adequado ao seu cenário de negócios:
Geralmente, usar o Lindorm SQL para contar linhas é mais rápido do que usar o HBase RowCounter, pois o Lindorm distribui e processa automaticamente a operação COUNT em paralelo (execução multithread), enquanto o HBase Shell realiza a contagem em thread única. No entanto, o COUNT ainda precisa varrer toda a tabela, e o tempo limite padrão é de 120 segundos. A operação retorna um erro quando atinge o tempo limite. Para tabelas grandes, aumente o tempo limite usando o HINT no SQL. As velocidades de processamento do Lindorm SQL podem atingir centenas de milhares de linhas por nó por segundo. Como o COUNT consome muita CPU, não o execute durante os horários de pico de negócios.
Obter a contagem exata de linhas de uma wide table usando SQL
Conecte-se ao Lindorm usando Lindorm-cli, Use a MySQL client to connect to and use LindormTable ou JDBC e execute instruções SQL.
Por exemplo, execute a seguinte instrução SQL para contar as linhas de table_name e defina o tempo limite de execução para 5 minutos.
SELECT /*+ _l_operation_timeout_(300000) */ COUNT(*) FROM table_name;
O resultado é o seguinte:
+--------+
| EXPR$0 |
+--------+
| 160000 |
+--------+
Contar as linhas exatas de uma tabela requer uma varredura completa. Execute esta operação com cautela. Se o volume de dados ultrapassar um milhão de linhas, recomendamos que você:
-
Utilize índices de busca para aceleração: Query data in a wide table using a search index.
1843_v1_4_0.xdita">.
-
Adicione o HINT _l_operation_timeout para aumentar o tempo limite da instrução: HINT.
de uma wide table usando o HBase Shell
Conecte-se ao LindormTable usando o HBase Shell. Para mais informações, consulte Access LindormTable using Lindorm Shell.
Usar o comando COUNT (Recomendado)
O uso do comando COUNT no HBase Shell fornece a contagem exata de linhas de uma tabela HBase. O princípio consiste em varrer todos os dados da tabela em lotes e realizar a contagem. Portanto, execute o comando COUNT a partir de um cliente ECS na mesma VPC. Se você executar o comando COUNT pela Internet, a utilização da rede será alta, reduzindo a eficiência das estatísticas. Dependendo da estrutura da tabela, a velocidade de varredura varia. A velocidade de varredura completa da tabela pelo comando COUNT pode ser inferior a 100.000 linhas por segundo. Execute a seguinte instrução para contar o total de linhas da tabela:
count 'table_name'O resultado é o seguinte:

Usar o plug-in HBase RowCounter para aceleração
Embora o comando count no HBase Shell obtenha a contagem exata de linhas de uma wide table, a velocidade é lenta para tabelas grandes. O plug-in RowCounter inicia uma tarefa MR pseudodistribuída local para executar a operação COUNT. Por padrão, o plug-in roda em thread única, com velocidade de estatística semelhante à do comando COUNT do HBase Shell. Para melhorar a velocidade, especifique
mapreduce.local.map.tasks.maximume aumente o número de threads. A execução paralela com múltiplas threads acelera significativamente as estatísticas.-
A quantidade de threads deve ser menor ou igual ao número de regions na tabela.
be less than or equal to the number of regions in the table.be less than or equal to the number of regions in the table.
-
Aumentar o número de threads pode causar alta carga no cluster e afetar os services online. Defina o número com base nos requisitos de negócios.
ause high cluster load and affect online services. Set the number based on business requirements.
Por exemplo, execute os seguintes comandos no HBase Shell para usar o plug-in RowCounter e contar as linhas de uma wide table do Lindorm.
Execute os comandos abaixo no HBase Shell para contar as linhas de uma wide table do Lindorm.
-
Use o plug-in RowCounter para contar o total de linhas da tabela de destino (table).
the total rows of the target table (table).
./alihbase-2.0.18/bin/hbase org.apache.hadoop.hbase.mapreduce.RowCounter "table_name"-
Utilize o plug-in RowCounter para contar o total de linhas da tabela (table) com 16 threads simultâneas.
l rows of the table (table) with 16 concurrent threads.
./alihbase-2.0.18/bin/hbase org.apache.hadoop.hbase.mapreduce.RowCounter -Dmapreduce.local.map.tasks.maximum=16 "table_name"-
Use o plug-in RowCounter para contar o total de linhas da tabela de destino (table) no namespace ns.
s of the target table (table) in namespace ns.
./alihbase-2.0.18/bin/hbase org.apache.hadoop.hbase.mapreduce.RowCounter "ns:table_name"O resultado das estatísticas do plug-in RowCounter é salvo no arquivo
hbase.logdentro do diretório Log, conforme mostra a figura a seguir.
-
Métodos para obter a contagem estimada de linhas de uma wide table
Obtenha a contagem estimada de linhas de uma wide table pelos seguintes métodos:
Obter a contagem estimada de linhas de uma wide table usando SQL
Ao contrário da instrução SELECT, usada para obter a contagem exata, a obtenção da contagem estimada utiliza a seguinte instrução SHOW:
Este recurso requer a versão 2.8.2.6 ou posterior do LindormTable e a versão 2.8.2.6 ou posterior do Lindorm SQL.
SHOW ESTIMATED ROWS FROM table_name;
O seguinte resultado é retornado:
+---------------------+
| ESTIMATED_ROW_COUNT |
+---------------------+
| 15000 |
+---------------------+
Visualize a contagem estimada de linhas de uma tabela no sistema de gerenciamento de cluster
Primeiro, Log on to the cluster management system.
No sistema de gerenciamento de cluster do Lindorm, visualize uma contagem aproximada de linhas da tabela na página Overview. Esse valor estimado é calculado somando os metadados de contagem de linhas dos arquivos de dados. Se o usuário realizar operações de atualização ou exclusão, a mesma linha de dados poderá estar distribuída entre vários arquivos. Além disso, os metadados de contagem de linhas de um arquivo são coletados quando o arquivo é gerado. Caso o usuário utilize o recurso TTL, alguns dados no arquivo podem ter expirado, o que pode fazer com que a contagem estimada difira da contagem real.
No sistema de gerenciamento de cluster do Lindorm, clique em Overview no painel de navegação à esquerda. Na área Current IDC, localize a tabela desejada. A contagem de linhas aparece na coluna Rows.
Se a tabela tiver dados, mas a contagem estimada for 0, a versão secundária do mecanismo de wide table do Lindorm está muito antiga. Atualize a versão secundária. Para saber como atualizar, consulte Upgrade the minor engine version of a Lindorm instance.