Qual é a diferença entre sub-biblioteca, sub-tabela e partição?

Pilha de tecnologia Java

www.javastack.cn

Excelente conta pública de tecnologia Java

1. Divida e combine

Eu já disse muitas vezes, não se apegue a uma determinada tecnologia, a tecnologia é a mesma. O importante é programar o pensamento , e o pensamento é o mais importante.

Quando a quantidade de dados é grande, é necessário ter uma ideia dividida para refinar a granularidade. Quando a quantidade de dados é muito fragmentada, é necessário ter uma idéia razoável para aumentar a granularidade.

1,1 pontos

Muitas tecnologias usam a ideia de programação de pontos, aqui estão alguns exemplos, estas são as idéias de pontos

  • O desenvolvimento de serviços centralizados para serviços distribuídos

  • De Collections.synchronizedMap (x) a 1.7ConcurrentHashMap a 1.8ConcurrentHashMap, refine a granularidade do bloqueio enquanto ainda garante a segurança do encadeamento

  • De AtomicInteger a LongAdder, o método size () de ConcurrentHashMap. Use o pensamento descentralizado para reduzir o número de casos e aumentar a acumulação de vários segmentos de vários segmentos

  • O algoritmo G1 GC da JVM divide o heap em várias regiões para gerenciamento de memória

  • No RegionServer da HBase, os dados são divididos em várias regiões para gerenciamento

  • O desenvolvimento de conjuntos de encadeamentos geralmente é isolado de recursos?


2.2 Ele

Muitas técnicas também são aplicadas às idéias de programação, aqui estão alguns exemplos, estas são as idéias

  • TLAB (Thread Local Allocation Buffers), buffer de alocação local do thread. Evite conflitos de vários segmentos e melhore a eficiência da alocação de objetos

  • Análise de escape, aloque a memória instanciada da variável diretamente na pilha, sem entrar no heap, o encadeamento termina e o espaço da pilha é reciclado. Reduza o número de objetos temporários alocados na pilha

  • Sob o algoritmo CMS GC, embora a limpeza de marca seja usada, também existem configurações para suportar a desfragmentação da memória. Como: -XX: UseCMS-CompactAtFullCollection (se deseja classificar após o FullGC, o Stop The World ficará mais longo) e -XX: CMSFullGCs-BeforeCompaction (compactação e acabamento após vários FullGC)

  • Bloqueio de bloqueio, quando o JIT descobre que uma série de operações consecutivas estão bloqueando e liberando repetidamente o mesmo objeto, aumentará o escopo da sincronização de bloqueio

  • A transmissão de dados de rede da Kafka possui algumas configurações de dados para reduzir a sobrecarga da rede. Tais como: batch.size e linger.ms, etc.

  • É geralmente chamado de interface de aquisição em massa para desenvolvimento?

2. Partição

Este artigo é baseado no MySql InnoDB

Dito isso, vamos falar sobre o corpo principal primeiro e sobre o particionamento primeiro, porque o blogueiro já escreveu um blog de particionamento no MySql antes, então não passo muito tempo escrevendo

Para detalhes, consulte: um artigo que leva você a entender o particionamento no MySQL!

2.1 Implementação

Como alcançá-lo está escrito no link acima.Aqui, lembre-se de que, se houver uma chave primária ou um índice exclusivo na tabela, a coluna da partição deve ser parte integrante do índice exclusivo.

Isso é dividido em bancos de dados, o aplicativo é transparente e o código não precisa modificar nada.

2.2 Documentos internos

Vá para o diretório de dados primeiro, se você não souber o local do diretório, poderá executar:

A seguir, veja os arquivos internos:

 

Podemos ver na figura acima que existem 2 tipos de arquivos, arquivos .frm e arquivos .ibd

  • Arquivo .frm : arquivo de estrutura da tabela

  • Arquivo .ibd : no InnoDB, o índice e os dados estão no mesmo arquivo. . Como a tabela de pedidos é dividida em 5 áreas, existem 5 desses arquivos

  • Arquivo .par : o resultado da sua execução pode ou não ser um arquivo .par. Nota: Começando com o MySql 5.7.6, o arquivo de definição de partição .par não é mais criado. As definições de partição são armazenadas no dicionário de dados interno.


2.3 Processamento de dados

Após o particionamento da tabela, o desempenho do MySql é aprimorado. Se houver uma tabela, haverá apenas um arquivo .ibd e uma grande árvore B +. Se a tabela estiver dividida, ela será dividida em áreas diferentes, de acordo com as regras da partição, ou seja, uma grande árvore B + é dividida em várias pequenas árvores.

A eficiência da leitura é definitivamente melhorada: se você usar o índice de chave da partição, primeiro vá para a árvore B + do índice auxiliar da partição correspondente e, em seguida, vá para a árvore B + do índice clusterizado da partição correspondente.

Se você não pegar a chave da partição, ela será executada uma vez em todas as partições. Causará múltiplos IO lógicos!

Se você deseja visualizar a consulta da partição da instrução sql, pode usar a instrução select xxxxx das partições de explicação. Você pode ver que uma instrução select passou por várias partições.

mysql> explain partitions select * from TxnList where startTime>'2016-08-25 00:00:00' and startTime<'2016-08-25 23:59:00';  
+----+-------------+-------------------+------------+------+---------------+------+---------+------+-------+-------------+  
| id | select_type | table             | partitions | type | possible_keys | key  | key_len | ref  | rows  | Extra       |  
+----+-------------+-------------------+------------+------+---------------+------+---------+------+-------+-------------+  
|  1 | SIMPLE      | ClientActionTrack | p20160825  | ALL  | NULL          | NULL | NULL    | NULL | 33868 | Using where |  
+----+-------------+-------------------+------------+------+---------------+------+---------+------+-------+-------------+  
row in set (0.00 sec)


3. Subtabela da sub-biblioteca

Quando uma tabela cresce com o tempo e os negócios, a quantidade de dados na tabela Curry aumenta. As operações de dados também aumentarão cada vez mais.

Os recursos de uma máquina física são limitados e, finalmente, a quantidade de dados que pode ser transportada e a capacidade de processamento dos dados será limitada. Neste momento, ele utilizará sub-tabelas de sub-bibliotecas para realizar tabelas em grande escala , do tipo que não pode ser colocado em uma única máquina.

A diferença é que a partição geralmente é colocada em uma única máquina e a partição de intervalo de tempo é usada mais para facilitar o arquivamento. É só que a sub-biblioteca e a sub-tabela precisam de código para realizar, e a partição é implementada dentro do mysql. As sub-tabelas e partições do sub-banco de dados não entram em conflito e podem ser usadas em combinação.

3.1 Implementação

3.1.1 Sub-biblioteca e padrão de tabela

  • 100G + armazenamento

  • Incremento de dados 200w + por dia

  • Número de tabela única 100 milhões +


3.1.2 Campos da sub-tabela do sub-banco de dados

O valor do campo da sub-tabela do sub-banco de dados é muito importante

  1. Na maioria dos cenários, este campo é o campo de consulta

  2. Numérico

Geralmente use userId, pode atender às condições acima

3.2 Middleware de banco de dados distribuído

Existem dois tipos de middleware de banco de dados distribuído, proxy e arquitetura do lado do cliente. O modo proxy inclui MyCat e DBProxy, e a arquitetura do lado do cliente inclui TDDL e Sharding-JDBC.

Então, qual é a diferença entre proxy e arquitetura do lado do cliente ? Quais são as vantagens e desvantagens de cada um? De fato, veja uma foto para saber.

No modo proxy, nossas instruções de seleção e atualização são enviadas ao agente, e o agente opera o banco de dados subjacente específico. Portanto, o próprio agente deve ser necessário para garantir alta disponibilidade, caso contrário, o banco de dados não está inativo e o proxy trava e desaparece.

O modo cliente geralmente cria uma camada de encapsulamento no conjunto de conexões, conecta-se a diferentes bibliotecas internamente e o sql é entregue ao smart-client para processamento. Normalmente, apenas um idioma é suportado: se você quiser usar outros idiomas, precisará desenvolver um cliente multilíngue.

As respectivas vantagens e desvantagens são as seguintes: 

3.3 Documentos internos

Eu encontrei um exemplo de sub-tabela sub-tabela + partição, que é basicamente o mesmo da tabela particionada, exceto que há mais arquivos .ibd com mais tabelas.A explicação dos arquivos está acima:

[miaojiaxing@Grim testmydata]# ls | grep 'base_info'
base_info_00.frm
base_info_00#P#p_2018.ibd
base_info_00#P#p_2019.ibd
base_info_00#P#p_2020.ibd
base_info_00#P#p_2021.ibd
base_info_00#P#p_init.ibd
base_info_00#P#p_max.ibd
base_info_01.frm
base_info_01#P#p_2018.ibd
base_info_01#P#p_2019.ibd
base_info_01#P#p_2020.ibd
base_info_01#P#p_2021.ibd
base_info_01#P#p_init.ibd
base_info_01#P#p_max.ibd
base_info.frm
base_info.ibd


3.4 Problema

3.4.1 Problemas de transação

Agora que o banco de dados está dividido em tabelas, ele deve envolver transações distribuídas.Como garantir que vários registros inseridos em bancos de dados diferentes possam ter êxito ou falhar ao mesmo tempo.

Alguns estudantes podem pensar no XA, o desempenho do XA é ruim e não precisa usar o mysql5.7. As transações flexíveis são a solução convencional atual, e o modelo TCC pertence a transações flexíveis.

Cada empresa possui sua própria implementação para questões de transações distribuídas: a Huawei usa saga, Ali usa TXC e Ant usa DTX. Ele suporta os modos FMT e TCC.


3.4.2 problema de junção

tddl, MyCAT, etc. suportam junção cross-shard. Mas tente evitar junções entre bancos de dados, como por meio de redundância de campo.

Se isso acontecer e o middleware suportar shard join, ele poderá ser usado assim. Se não for suportado, você pode consultar manualmente.

4. Resumo

A sub-tabela não é a mesma que a sua utilização.A sub-tabela é para aceitar a tabela de grande escala , que não pode ser colocada em uma única máquina. A partição geralmente é colocada em uma única máquina e a partição de intervalo de tempo é usada mais para facilitar o arquivamento .

Em termos de desempenho estável, todas são sub-tabelas.A diferença é que a tabela de partição é implementada internamente pelo mysql e haverá menos interação de dados que o esquema de sub-tabelas.

Autor: GrimMjx

www.cnblogs.com/GrimMjx/p/11772033.html

FIM

Materiais de aprendizagem:

Compartilhe uma cópia dos mais recentes materiais de aprendizado do arquiteto Java

Artigos recentes:

1. Método de escrita Java 10 big pack B, você pode se gabar!

2. Correspondência de padrões Java 14, recurso muito novo!

3. 8 dicas práticas do GitHub que você deve dominar!

4. Você ainda está usando o Date? Use rapidamente LocalDateTime!

5. 5 perguntas complicadas para entrevistas em cordas!

6. 8 estruturas de dados que todo programador deve dominar!

7. As 8 maneiras de escrever o modo singleton são muito completas!

8. O Nginx tem outra função Niu X! Cópia de tráfego

9. Quando vou, meu colega realmente armazena a senha em texto sem formatação! ! !

10. Um pedaço de SQL lixo que travou rapidamente uma CPU de 64 núcleos!

Há muitos produtos secos na conta pública.Leia o código para prestar atenção à conta pública da pilha de tecnologia Java.Leia mais.

Clique em " Ler original " para levá-lo a voar ~

495 artigos originais foram publicados · 1032 curtidas · 1,46 milhões de visualizações

Acho que você gosta

Origin blog.csdn.net/youanyyou/article/details/105525169
Recomendado
Clasificación