O ApsaraDB for HBase grava dados no HLog e na memória com base no modo Log-Structured Merge (LSM). Assim, o sistema evita operações de entrada/saída (I/O) aleatórias, o que garante alto desempenho e estabilidade nas escritas. Na maioria das soluções de banco de dados, a otimização de escrita prioriza a confiabilidade em detrimento do desempenho.
Use HTable.put(List<Put>) para agrupar várias escritas em uma única Remote Procedure Call (RPC) e reduzir a sobrecarga de rede por linha.
HTable.put(List<Put>)
Desative o AutoFlush
Defina o Autoflush como false melhora significativamente o desempenho de escrita. Contudo, aguarde até que 2 MB de dados estejam no buffer (hbase.client.write.buffer) ou até que o comando hbase.flushcommits() seja executado antes de invocar o Autoflush em um RegionServer. Nesse cenário, os dados não são gravados no banco de dados remoto.
Configure o tamanho do buffer com HTable.setWriteBufferSize().
Otimização do servidor
Flag WAL
O Write-Ahead Log (WAL) persiste cada escrita em disco antes de confirmá-la para assegurar durabilidade. Desativar o WAL reduz o número de operações de I/O e aumenta o throughput de escrita, pois apenas as gravações na MemStore ocorrem.
Essa configuração aplica-se a cenários em que o desempenho tem prioridade sobre a confiabilidade.
Aumente a memória da MemStore
Para cargas de trabalho intensivas em escrita, aumente a alocação de memória da MemStore e reduza a alocação do BlockCache. Essa abordagem é o inverso da otimização para leitura.
Gerencie o acúmulo de HFiles
Com alto throughput de escrita, os HFiles se acumulam mais rápido do que a compactação consegue mesclá-los.
Para controlar a quantidade de HFiles:
Agende a compactação principal (major compaction) fora dos horários de pico para mesclar HFiles sem competir com o tráfego de escrita em tempo real.
Se não for possível reduzir a contagem de HFiles dentro de uma janela aceitável, adicione nós RegionServer para distribuir a carga de escrita.