Anuncios

Bienvenidos sean a este post, hoy hablaremos sobre los otros dos tipos de particionamiento.

Anuncios
Anuncios

Estos dos tipos son muy similares porque su proposito es proveer una distribucion de filas mas uniformes entre las particiones, cada valor devuelto por las expresiones de particionamiento tienen las mismas probabilidades de ser asignadas a cada particion, un grupo de valores contiguos seran asignados a cada particion, sin embargo si la distribucion de los valores unicos tiene picos muy altos, es decir que un limitado conjunto de valores se repite muy a menudo, es posible que algunas particiones contengan mas informacion que otras, estos tipos trabajan mejor si la distribucion de los valores unicos es mas uniforme, en ambos tipos la particion de destino para nuevas filas es determinada automaticamente por el servidor mediante la siguiente formula:

particion_destino = resultado_expresion MOD numero_de_particiones
Anuncios
Nota: 
Recuerden que el operador MOD nos devuelve el resto de la division entre ambos valores.
Anuncios

La eleccion entre estos dos tipos depende de la funcion de particionamiento que necesitamos implementar, las diferencias entre estos son muy similares a las diferencias entre LIST y LIST COLUMNS, la cual hace facil de recordar:

  • El tipo HASH acepta cualquier funcion de particionamiento que devuelve un entero positivo o NULL
  • El tipo KEY acepta una columna simple de cualquiera de los tipos de LIST COLUMNS y no se permiten calculos en esa columna
Anuncios

Con el tipo KEY un hash del valor devuelto es calculado, en cambio HASH usa la funcion PASSWORD(), la cual usa una variacion del algoritmo SHA, por lo general para crear una tabla particionada por HASH se utiliza un codigo similar al siguiente 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, date)
)
  ENGINE = InnoDB
PARTITION BY HASH(YEAR(date))
PARTITIONS 8;
Anuncios
Anuncios

De hecho la mayoria de las veces solo queremos determinar la expresion de particionamiento y la cantidad de particiones, para este caso seleccionamos a YEAR(DATE) como expresion de particionamiento asi que todos los articulos que sean del mismo año estaran en la misma particion, lo cual permitira que la mayoria de los queries accedan a una sola particion, tambien podemos hacer el siguiente particionamiento:

…
PARTITION BY HASH(MONTH(date)) (
    PARTITION p0,
    PARTITION p1
);
Anuncios

Como pueden observar se nos permite especificar un nombre para cada particion, inclusive podemos especificar un path para cada archivo de particion pero de eso hablaremos mas adelante, vamos a hacer un ejemplo para crear particiones de tipo KEY:

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, date)
)
  ENGINE = InnoDB
PARTITION BY KEY(id)
PARTITIONS 8;
Anuncios

En este caso vamos a particionar la tabla con una clave AUTO_INCREMENT la cual proveera una distribucion de valores mas uniforme, al igual que en el tipo HASH podemos especificar nombres para cada particion, tambien podemos usar una sintaxis mas concisa, dado que id es la clave primaria no es necesario especificarla para el particionamiento por KEY:


PARTITION BY KEY()
PARTITIONS 8;
Anuncios

En resumen, hoy hemos visto a los tipos KEY y HASH, sus similitudes, sus sutiles diferencias, como son proporcionales con respecto a LIST y LIST COLUMNS, tambien vimos un par de ejemplos para implementarlos, con unas caracteristicas adicionales, 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