Explicação detalhada dos princípios do sistema distribuído KaiwuDB Range Split & Merge

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.
{{o.nome}}
{{m.nome}}

Acho que você gosta

Origin my.oschina.net/u/5148943/blog/11046913
Recomendado
Clasificación