Anuncios

Bienvenidos sean a este post, hoy hablaremos sobre una palabra clave para los tipos RANGE y LIST.

Anuncios

Como mencionamos al comienzo esta palabra clave nos crea las siguientes variantes de estos tipos:

  • RANGE COLUMNS
  • LIST COLUMNS
Anuncios

Cuando las aplicamos no existe la expresion de particionamiento simples, los valores son asignados a las particiones basadas en una lista de columnas, a estas algunas veces se la denomina lista de columnas particionadas en la documentacion y en los articulos tecnicos, aqui no se permiten ningun tipo de funcion, operacion o cualquier tipo de elaboracion para transformar los valores de la columna pero se permiten mas tipos de datos:

  • Todo tipo de entero pero solamente valores positivos
  • Los tipos DATE y DATETIME
  • Los tipos VARCHAR, CHAR, VARBINARY y BINARY
Anuncios
Anuncios

Esto es muy importante porque al no estar permitido el uso de funciones no tenemos forma de convertir valores no enteros en tipo enteros, si observamos el ejemplo que vimos en el post anterior podemos usarlo tambien como LIST COLUMNS porque solo incluye un nombre de columna, aunque el tipo RANGE COLUMNS puede ser mucho mas util cuando el rango de valores esta basado en multiples columnas para obtener una buena distribucion de valores, veamos el siguiente ejemplo:

CREATE TABLE article (
  id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  date DATE NOT NULL,
  year CHAR(4) NOT NULL,
  author VARCHAR(100),
  language TINYINT UNSIGNED,
  text TEXT,
  PRIMARY KEY (id, language, year)
)
  ENGINE = InnoDB
PARTITION BY RANGE COLUMNS (language, year) (
  -- articulos viejos en ingles
  PARTITION p0 VALUES LESS THAN (1, '2010'),
  -- articulos recientes en ingles
  PARTITION p1 VALUES LESS THAN (1, '2030'),
  -- articulos viejos no en ingles
  PARTITION p2 VALUES LESS THAN (100, '2010'),
  -- articulos recientes no en ingles
  PARTITION p3 VALUES LESS THAN (MAXVALUE, MAXVALUE)
);
Anuncios

La estrategia de particionamiento refleja varias situaciones:

  • Como sucede generalmente puede existir muchisimos articulos viejos en ingles, y muchos menos en otros idiomas por lo tanto hacer una separacion entre los articulos en ingles y no, es una buena eleccion
  • A su vez separamos entre los mas recientes y los que no
Anuncios
Anuncios

Como dijimos anteriormente al no poder utilizar funciones como YEAR(date) por lo que decidimos duplicar la informacion de los años como cadenas, dado que todos los caracteres en la tabla son digitos no se modificara el orden siempre que todos los valores contengan cuatro digitos, otra limitacion que tenemos es el uso de MAXVALUE dado que siempre lo debemos usar en la ultima particion, si lo implementamos en la linea que corresponde a los articulos recientes en ingles nos devolvera un error al implementarlo, por lo tanto deberan usarlo con un valor mas alto de lo normal.

Anuncios
Anuncios

Con el RANGE COLUMNS podemos pasar a hablar de LIST COLUMNS, este tipo nos puede ser mas util para encontrar una lista de valores contra una columna no entera, para entenderlo volvamos al ejemplo que vimos en el post anterior, en ese caso almacenamos valores de tipo entero pero quizas preferimos almacenar un codigo ISO de dos caracteres, tal como mencionamos en el post anterior esto no es posible con LIST pero LIST COLUMNS si nos permite manejarlo de esta forma, veamos un ejemplo:

CREATE TABLE article (
  id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  date DATE NOT NULL,
  author VARCHAR(100),
  language TINYINT UNSIGNED,
  text TEXT,
  PRIMARY KEY (id, language)
)
  ENGINE = InnoDB
PARTITION BY LIST (language) (
  PARTITION p0 VALUES IN ('en'),
  PARTITION p1 VALUES IN ('fr', 'de'),
  PARTITION p2 VALUES IN ('es', 'it', 'ir', 'is', 'nl', 'ru', 'ro', 'sr'),
  PARTITION px VALUES IN (NULL)
);
Anuncios

Si lo vemos con respecto al post anterior la sutil diferencia es que en lugar de numeros utilizamos el codigo iSO dejando un codigo poco mas legible con respecto al original.

Anuncios

En resumen, hoy hemos visto como afecta la palabra COLUMNS a los tipos RANGE y LIST, como se implementan, los beneficicos que nos brindan y un par de detalles mas, espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios
pp258

Donación

Es para mantenimento del sitio, gracias!

$1.50

Anuncio publicitario