3.1.4 Particiones

3.1.4 PARTICIONES:

Una partición es una división de una base de datos lógica o sus elementos constituyentes en partes independientes. La partición de bases de datos se hace normalmente por razones de mantenimiento, rendimiento o manejo. Cada partición puede ser extendida hasta múltiples nodos, y los usuarios en el nodo pueden hacer transacciones locales en la partición.


Esto aumenta el rendimiento en sitios que tienen transacciones regularmente involucrando ciertas vistas de datos, y manteniendo la disponibilidad y la seguridad. Esta partición puede hacerse creando bases de datos más pequeñas separadas (cada una con sus propias tablas, índices, y registros de transacciones) o dividiendo elementos seleccionados, por ejemplo, solo una tabla.



Partición horizontal: Consiste en poner diferentes filas en diferentes tablas. Por ejemplo, clientes con códigos postales menores que 50000 están almacenados en la tabla ClientesEste, mientras que los clientes con códigos postales mayores o iguales a 50000 están almacenados en la tabla ClientesOeste. Las dos tablas de partición son entonces ClientesEste y ClientesOeste, mientras que una vista con una unión podría ser creada con las dos tablas para poder dar una vista completa de todos los clientes.


Partición vertical: Consiste en crear miles de tablas con miles de columnas y crear tablas para poner las columnas restantes. Se puede particionar una tabla de 5 maneras diferentes:
  1. Por rango
  2. Por listas
  3. Por hash
  4. Por clave
  5. Compuestas
Por rango: Para construir nuestras particiones especificamos rangos de valores. Por ejemplo, podríamos segmentar los datos en 12 particiones: una para los contratos de 1950 a 1960, otra para los años 60, los 70, 80, 90, la década del 2000 y la década actual
  • ALTER TABLE contratos PARTITION BY RANGE(YEAR(fechaInicio)) ( PARTITION partDecada50 VALUES LESS THAN (1960), PARTITION partDecada60 VALUES LESS THAN (1970), PARTITION partDecada70 VALUES LESS THAN (1980), PARTITION partDecada80 VALUES LESS THAN (1990), PARTITION partDecada90 VALUES LESS THAN (2000), PARTITION partDecada00 VALUES LESS THAN (2010), PARTITION partDecada10 VALUES LESS THAN MAXVALUE );
Por listas: Para construir nuestras particiones especificamos listas de valores concretos.
  • ALTER TABLE contratos PARTITION BY LIST(YEAR(fechaInicio)) ( PARTITION partDecada50 VALUES IN (1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959), PARTITION partDecada60 VALUES IN (1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969), PARTITION partDecada70 VALUES IN (1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979), PARTITION partDecada80 VALUES IN (1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989), PARTITION partDecada90 VALUES IN (1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999), PARTITION partDecada00 VALUES IN (2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009), PARTITION partDecada10 VALUES IN (2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019));
Por hash: MySQL se encarga de distribuir las tuplas automáticamente usando una operación de módulo. Sólo hay que pasarle una columna o expresión que resulte en un entero (el hash) y el número de particiones que queramos crear.
  • ALTER TABLE contratos PARTITION BY HASH(YEAR(fechaInicio)) PARTITIONS 7;
Por clave: Similar a la partición por hash, pero en este caso no necesitamos pasarle un entero; MySQL utilizará su propia función de hash para generarlo. Si no se indica ninguna columna a partir de la que generar el hash, se utiliza la clave primaria por defecto.
  • ALTER TABLE contratos PARTITION BY KEY() PARTITIONS 7;
Compuestas: Podemos combinar los distintos métodos de particionado y crear particiones de particiones. Por último, un pequeño ejemplo de cómo afectaría el particionado a una consulta sencilla como obtener el número total de tuplas que cumplen una condición. Estas son las estadísticas de la consulta sin particionado (ni índices)

EXPLAIN SELECT COUNT(*)
FROM contratos
WHERE fechaInicio BETWEEN '1950-01-01' AND '1955-12-31'


Y este el resultado de añadir las particiones (nótese la palabra clave PARTITIONS para que nos muestre también la información relativa a las particiones)

EXPLAIN PARTITIONS SELECT COUNT(*)
FROM contratos
WHERE fechaInicio BETWEEN '1950-01-01' AND '1955-12-31‘


El número de tuplas que MySQL tiene que comprobar se ve disminuido en 2 órdenes de magnitud.



Equipo No.3 

Comentarios

Entradas populares de este blog

3.1 Estructuras Lógicas de Almacenamiento y 3.1.1 Definición de Espacio de Almacenamiento

3.1.2. Definición y Creación del espacio asignado para cada base de datos

1.1.2 Relación del DBA con otras áreas del sistema.