Os diferente métodos de particionamento de uma tabela dividem-se de acordo com a "orientação" das partições, e também de acordo com o modo como se definem os limites das partições.
Quanto à orientação, temos particionamentos "verticais" e "horizontais". O particionamento "vertical" consiste na divisão de registos com muitos campos em duas ou mais tabelas relacionadas e é, no fundo, a base da normalização.
O particionamento "horizontal" implica a divisão por duas ou mais tabelas dos registos inicialmente contidos numa só tabela. Esta divisão é feita considerando os valores de um campo de interesse. Normalmente consideram-se como interessantes para definir partições campos que tenham algum significado lógico no âmbito da aplicação usada, por exemplo, se tivermos uma tabela que guarde documentos é lógico dividi-la por datas.
Ao criar as partições de dados temos várias hipóteses de definir os intervalos a considerar: Intervalos de Valores, Listas, Funções de Hash ou combinações destas.
A particão de tabelas baseada em intervalos é talvez a mais comum e divide simplesmente a tabela original de acordo com o intervalo definido, por exemplo, se tivermos uma tabela de documentos "Doc" que armazene a data do documento no campo "DataDoc", podemos criar partições anuais (este exemplo é em PostgreSQL):
CREATE TABLE Doc_1999 (
CHECK( DataDoc >= DATE '01-01-1999' AND DataDoc <= DATE '31-12-1999') INHERITS (Doc) ; CREATE TABLE Doc_2000 ( CHECK( DataDoc >= DATE '01-01-2000' AND DataDoc <= DATE '31-12-2000' ) INHERITS (Doc) ; ... CREATE TABLE Doc_2008 ( CHECK( DataDoc >= DATE '01-01-2008' AND DataDoc <= DATE '31-12-2008' ) INHERITS (Doc) ;
Claro que teríamos que ter o cuidado necessário para criar a restante estrutura e código para validar esta divisão. Noutros SGBD, por exemplo em Oracle, podíamos fazer simplesmente:
CREATE TABLE Doc(...)
PARTITION BY RANGE (DataDoc)
(
PARTITION Doc_1999 VALUES LESS THAN (to_date('01-Jan-2000')),
PARTITION Doc_2000 VALUES LESS THAN (to_date('01-Jan-2001')),
...
)
Em vez deste tipo de divisão, podemos usar uma lista de valores, por exemplo Cidades ou Países para obter as partições. Neste caso a diferença está na definição dos limites. Por exemplo, vendo o caso de uma tabela de Clientes que tivesse uma coluna Cidade, poder-se-ia fazer alguma coisa do género:
CREATE TABLE Clientes_Lisboa (
CHECK( Cidade = 'Lisboa') INHERITS (Clientes) ;
CREATE TABLE Clientes_Porto (
CHECK( Cidade = 'Porto') INHERITS (Clientes) ;
...
Por último, a divisão por Hash, usa uma função Hash para obter um valor que vai servir de base à definição das partições.
2 comentários:
Hello. This post is likeable, and your blog is very interesting, congratulations :-). I will add in my blogroll =). If possible gives a last there on my blog, it is about the Placa de Vídeo, I hope you enjoy. The address is http://placa-de-video.blogspot.com. A hug.
Hello. This post is likeable, and your blog is very interesting, congratulations :-). I will add in my blogroll =). If possible gives a last there on my blog, it is about the MP3 e MP4, I hope you enjoy. The address is http://mp3-mp4-brasil.blogspot.com. A hug.
Enviar um comentário