Partição (banco de dados) – Wikipédia, a enciclopédia livre

Exemplo da ferramenta MySQL, Adminer, usada para criar partições de bancos de dados.

Uma partição é uma divisão de um banco de dados lógico ou seus elementos constituintes em partes independentes distintas. O particionamento de banco de dados normalmente é feito por razões de gerenciabilidade, desempenho ou disponibilidade.

Benefícios das partições múltiplas

[editar | editar código-fonte]

Uma utilização popular de particionamento é em um sistema de gerenciamento de banco de dados distribuído. Cada partição pode ser repartida em múltiplos nós, e os usuários no nó podem realizar transações locais na partição. Isso aumenta o desempenho nos sites que possuem operações regulares envolvendo certas visões de dados, mantendo a disponibilidade e segurança.

Critérios de particionamento

[editar | editar código-fonte]

Na atualidade os sistemas de gerenciamento de banco de dados relacionais de ponta preveem diferentes critérios para dividir o banco de dados. Eles definem uma chave de particionamento e as partições com base em determinados critérios.

Os critérios mais comuns são:

Particionamento de intervalo
Seleciona uma partição determinando se a chave de particionamento está dentro de um determinado intervalo. Um exemplo pode ser uma partição para todas as linhas onde a coluna DataVenda possui um valor entre 01/05/2017 e 31/05/2017. Isso distribui as tuplas com base no valor dos intervalos de alguns atributos. Além de suportar consultas de correspondência exata (como em hashing), é adequado para consultas de alcance. Por exemplo, uma consulta com um predicado "A entre A1 e A2" pode ser processada pelo único nó (s) que contém tuplas.
Lista de particionamento
Uma partição é atribuída uma lista de valores. Se a chave de particionamento tem um desses valores, a partição é escolhida. Por exemplo, todas as linhas em que a coluna País for Islândia, Noruega, Suécia, Finlândia ou Dinamarca poderia constituir a partição dos países nórdicos.
Particionamento composto
Permite a certas combinações dos esquemas de particionamento acima, aplicando, por exemplo, primeiramente um intervalo de particionamento e, então, um particionamento hash. Hashing consistente pode ser considerado um composto de particionamento de hash e de lista, onde o hash reduz o espaço de chave para um tamanho que pode ser listado.
Particionamento Hash
Aplica uma função hash a alguns atributos para determinar o número da partição. Essa estratégia permite consultas de correspondência exata no atributo de seleção serem processadas por exatamente um nó e todas as outras consultas serem processadas por todos os nós em paralelo.

Métodos de particionamento

[editar | editar código-fonte]

O particionamento pode ser feito construindo bancos de dados menores separados (cada um com suas próprias tabelas, índices e logs de transação), ou dividindo elementos selecionados, por exemplo, apenas uma tabela.

O particionamento horizontal (ver também shard) envolve colocar diferentes linhas em tabelas diferentes. Por exemplo: ao invés de manter em uma única tabela as vendas, poderia separar as vendas de cada mês/ano em diferentes tabelas. Assim, as vendas do mês de maio ficariam na tabela Vendas201705, enquanto as de junho na Vendas201706.

Uma visão, por meio de UNION, poderia ser criada para fornecer uma visão completa de todas as vendas.

O particionamento vertical envolve a criação de tabelas com menos colunas e a utilização de tabelas adicionais para armazenar as colunas restantes.[1] Normalização de dados utiliza essa técnica de divisão de colunas entre tabelas, mas o particionamento vertical vai além e particiona colunas mesmo quando já normalizadas. Diferentes armazenamentos físicos também podem ser usados para realizar o particionamento vertical. Armazenar colunas usadas ​​raramente, ou muito largas, em um dispositivo diferente, por exemplo, é um método de particionamento vertical. Feito de forma explícita ou implícita, este tipo de particionamento é chamado de "divisão de linha" (a linha é dividida por suas colunas). Uma forma comum de particionamento vertical é dividir dados dinâmicos (de busca lenta) dos dados estáticos (busca rápida) em uma tabela onde os dados dinâmicos não são usados tão frequentemente como os estáticos. Criando uma visão através das duas tabelas recém-criadas, restaura-se a tabela original. Apesar da penalidade de desempenho, o desempenho aumentará quando se acessam os dados estáticos, por exemplo, para análise estatística.

Referências

  1. Vertical Partitioning Algorithms for Database Design, by Shamkant Navathe, Stefano Ceri, Gio Wiederhold, and Jinglie Dou, Stanford University 1984 [1]