subtabela de banco de dados horizontal mysql e subplano de tabela online

Em que circunstâncias o subbanco de dados e a subtabela devem ser executados?

        No caso de um pequeno volume de negócios, uma única tabela geralmente é usada para operações, mas à medida que os dados da tabela se tornam cada vez maiores, o desempenho torna-se cada vez pior;

        Tabela única MySQL qps 2k, profundidade da árvore 3-4 camadas, provavelmente o limite máximo relativo que uma única tabela pode suportar;

ps: Este artigo não discute tabelas de partição;

Estratégia de fragmentação

1. Tabela de toques, id, data, etc.

        Tabela única 1000, dividida em 4 bibliotecas, 4 tabelas

        Determine o id inicial de cada tabela, 0 - 5 milhões, 500 - 1000, 1000-1500, 1500 - 2000

        Inserir: O servidor consulta se a tabela a (0-500) usada atualmente está prestes a atingir o ponto crítico (450/500) de vez em quando,

        Se chegar, atualize para a próxima tabela b (500-1000), que pode resolver o problema de limite.

        Consulta: De acordo com o id, pode ser atribuído a diferentes tabelas.

        Desvantagens: dados quentes simultâneos altos

        Em negócios normais, a atividade de novos usuários é muito maior do que a dos usuários antigos, o que significa que os dados do hotspot são todos alocados na mesma tabela e alguns recursos são desperdiçados;

        solução:

                Diferentes configurações de banco de dados podem ser adquiridas para armazenamento;

        vantagem:

                A fragmentação de tabelas é relativamente simples e a reexpansão só precisa adicionar tabelas e não há migração;

                O id é gerado de forma auto-incremental sem depender de terceiros

                É muito adequado para a subtabela do banco de dados da tabela de auto-incremento de id

2. tabela de hash

        Use um gerador de id de terceiros, como Snowflake;

        O id é atribuído a diferentes tabelas através do módulo hash.

        Vantagens: Os dados são distribuídos uniformemente e não haverá dados quentes em uma tabela.

        Desvantagens: Necessidade de manter um serviço de identificação altamente disponível (consulte o algoritmo de geração de floco de neve altamente disponível da Meituan)

mesa online

        A coisa mais importante a se prestar atenção na subtabela online são os dados incrementais , que existem tanto no rang quanto no hash.

        As subtabelas online não podem ser movidas para um novo banco de dados de uma só vez, como uma atualização de desligamento, que precisa ser migrada em lotes para evitar que o banco de dados seja encerrado;

        Para garantir que os dados nas tabelas antigas e novas sejam consistentes, também é necessário manter a gravação dupla (os bancos de dados novos e antigos precisam ser gravados);

        migração de dados:

        De acordo com as regras de divisão de tabelas, os dados são migrados para o novo banco de dados em pequenos segmentos, que não devem ser muito grandes para evitar o travamento do banco de dados.

        Por exemplo, se houver 10 milhões de dados, 1.000 dados serão migrados a cada vez;

        Faça agrupamento de hash para cada dado e insira-os em lotes até que haja repetições, o que significa que a migração está completa;

        Sequência de transação:

        trancar mesa velha

        Dados em lote, agrupados em 4 tabelas de acordo com o hash

        Inserir nova tabela <---- Entre eles, esta etapa não bloqueará a nova tabela,

        Em casos extremos, como falta de energia são excluídos, a falha de inserção será apenas repetida,

        Isso significa que os dados mais recentes foram atualizados e a migração pode ser interrompida

        desbloquear relógio antigo

        Desvantagens: A implementação do código é difícil e, para serviços distribuídos, muitos detalhes devem ser considerados, como quando a tabela antiga é desconectada e a velocidade é lenta.

        Sincronização de gravação dupla:

        Necessidade de inserir ou modificar as tabelas antigas e novas ao mesmo tempo

        A sequência da transação é:

                Bloquear tabela original

                bloquear nova tabela

                escrever

                Desbloqueie a mesa original

                desbloquear nova mesa

        Caso 1:

                A tabela original é atualizada com êxito, mas a atualização da nova tabela falha.

        Caso 2:

                A atualização da tabela original falhou, a nova atualização da tabela falhou

Se ocorrer o caso 2, significa que a atualização falhou, mas os dados são consistentes e aceitáveis.

No caso 1, haverá inconsistência de dados, mas a tabela original é atualizada com sucesso, e a sincronização pode ser concluída por meio de migração de dados, o que também é aceitável.

おすすめ

転載: blog.csdn.net/weixin_56766616/article/details/127786185