Introdução ao histórico
Range (particionamento) é uma tecnologia para gerenciamento de banco de dados e organização de dados. Em um sistema distribuído, podemos organizar os dados em vários intervalos de acordo com certas regras e obter gerenciamento dinâmico por meio de divisão e fusão para otimizar o desempenho da consulta e ajudar a melhorar a escalabilidade e a disponibilidade do sistema e o balanceamento de carga. O conteúdo principal desta transmissão ao vivo é: Divisão e mesclagem de intervalo no sistema distribuído KaiwuDB.
A seguir está um trecho de parte do conteúdo. Para ver o conteúdo completo, clique para visualizar o conteúdo da versão completa >> Reprodução de vídeo da versão completa.
Divisão de intervalo KaiwuDB
Introdução à divisão
splitQueue é responsável pela divisão de intervalo. As condições que acionam a divisão de intervalo são as seguintes:
- Crie um novo banco de dados ou tabela.
- O tamanho do intervalo excede range_max_bytes.
- O QPS do Range é muito alto, excedendo kv.range_split.load_qps_threshold (valor padrão 250, configurável).
- Modifique a zona Configurar do índice ou partição para torná-la independente do nível pai. Em casos especiais, a divisão adminSplit será chamada diretamente, sem passar por splitQueue.
- Ao importar uma grande quantidade de dados, um intervalo é automaticamente dividido em vários intervalos.
- Ao importar dados, um intervalo em branco é pré-dividido para dados que podem ser importados posteriormente.
- Divisão manual: altere a tabela table_name dividida em valores (key1,key2,…); onde Values representa o valor da chave primária. Se for uma chave primária conjunta, você pode escrever vários valores e não pode exceder o número de. colunas de chave primária.
Fluxograma do algoritmo de divisão
Um determinado nó no KaiwuDB possui um thread/worker separado em execução em segundo plano para lidar com a divisão de intervalos relacionados. A divisão de intervalo é dividida em 2 fases: Fase 1 - Preparação dos parâmetros de divisão de intervalo. Fase 2 - Atualização do intervalo e sua estrutura de índices;
Conforme mostrado na figura, o processo à esquerda é principalmente a preparação para a divisão do intervalo:
Primeiro bloqueie o valor chave da chave do intervalo dividido. Depois de encontrar esse valor de chave, o sistema ajustará o intervalo de intervalo atual e usará o valor da chave de divisão como o valor da chave final da partição.
O processo criará um novo intervalo para a direita, seu valor de chave inicial é o valor de chave usado para divisão e seu valor de chave final é o valor de chave final do intervalo original. Ao mesmo tempo, após a divisão do intervalo original, sua versão será atualizada iterativamente em 1, e a versão atualizada será aplicada aos intervalos divididos à esquerda e à direita ao mesmo tempo.
Quando os parâmetros de divisão nos lados esquerdo e direito do intervalo estão prontos, o processo entra na fase de atualização dos dados do sistema. Em resumo, é necessário preparar solicitações de gravação e solicitações de processo. Este processo está associado a uma transação e a todo o processo. a transação precisa concluir os seguintes assuntos:
Inicie uma nova transação, o status está pendente
- Atualizar intervalo esquerdo
- Escreva o novo intervalo certo
- Atualize o caminho de pesquisa correspondente da estrutura em árvore de dois níveis do índice Big Mac no intervalo esquerdo
- Insira o caminho de pesquisa correspondente da estrutura em árvore de dois níveis do índice Big Mac no intervalo direito
- O status da transação de atualização é Confirmado
- Atualize o MVCC do intervalo esquerdo e direito
- Limpe a intenção de escrita
Neste ponto, a divisão de todo o Range está concluída.
Exemplo de gatilho dividido
O cenário de acionamento de depuração a seguir ocorre depois que o tamanho do intervalo excede um valor crítico predeterminado. Cada intervalo é processado em série com temporizador de espera. Após o relógio acordar, o tamanho do intervalo será verificado. Se for constatado que o tamanho do intervalo está em torno de 70 MB e excede o intervalo predeterminado de 64M, o sistema acionará a função de divisão do intervalo para dividir o intervalo que excede o limite de capacidade.
O thread ou trabalhador em segundo plano verificará continuamente todos os intervalos para processamento em um loop.
Mesclagem de intervalo KaiwuDB (mesclagem)
Exemplo de mesclagem
Conforme mostrado na figura, quando o usuário exclui uma grande quantidade de dados, o tamanho dos dois intervalos adjacentes diminui drasticamente e o sistema os mescla.
A figura a seguir mostra o efeito após a fusão após os dois intervalos anteriores: lem-str, str- serem mesclados, str- desaparecerem, deixando apenas os valores-chave dos dois intervalos originais serem mesclados no mesmo intervalo lem-. -. Correspondentemente, a estrutura de dados de segundo nível do índice Big Mac também foi ajustada, e a estrutura do índice de árvore de primeiro nível desapareceu.
Condições de mesclagem
As condições para mesclar os intervalos são relativamente rígidas, incluindo principalmente: A mesclagem não está desabilitada Existe um próximo intervalo e a mesma zona de configuração O tamanho dos dois intervalos a serem mesclados é menor que range_min_bytes A divisão do intervalo de QPS não será acionada após a mesclagem
O último significa que se o Range onde os dados estão localizados possuir dados quentes, a mesclagem não será realizada, pois a mesclagem irá desencadear uma divisão, o que fará com que o sistema deixe de funcionar normalmente.
Fluxograma do algoritmo de mesclagem
Conforme mostrado na figura, a fusão, assim como a divisão, também é dividida em duas etapas: a primeira etapa - preparação dos parâmetros do intervalo; a segunda etapa - habilitação de transações para processamento de atualização do intervalo; Para o conteúdo completo, clique para ver o conteúdo da versão completa >> [Reprodução de vídeo da versão completa] ( https://www.bilibili.com/video/BV11y421z7jH/?spm_id_from=333.999.0.0 )
Exemplo de depuração de mesclagem Os dois diagramas esquemáticos a seguir mostram o processo específico de depuração da mesclagem de intervalo e os parâmetros relacionados ao intervalo correspondente.
Decidi desistir do software industrial de código aberto . Grandes eventos - OGG 1.0 foi lançado, a Huawei contribuiu com todo o código-fonte do Ubuntu 24.04 LTS foi oficialmente demitido . ". O Fedora Linux 40 foi lançado oficialmente. Uma conhecida empresa de jogos lançou novos regulamentos: os presentes de casamento dos funcionários não devem exceder 100.000 yuans. A China Unicom lança a primeira versão chinesa Llama3 8B do mundo do modelo de código aberto. Pinduoduo é condenado a compensar 5 milhões de yuans por concorrência desleal Método de entrada na nuvem doméstica - apenas a Huawei não tem problemas de segurança de upload de dados na nuvem.