El particionamiento o segmentación es una técnica para dividir la información de una base de datos en diferentes partes y cada parte almacenarla en un dispositivo -físico o lógico- para aprovechar características de paralelismo de los motores modernos de bases de datos, para distribuir espacio de almacenamiento y para eficientar tablas muy grandes.
Partición o segmentación de tablas e índices
Las tablas se pueden segmentar por grupos de registros y se pueden incluso almacenar en diferentes FileGroups (que son generados por el DBA) que apuntan a diversos discos inclusive.
La decisión acerca del uso de las particiones depende básicamente del tamaño actual y futuro de la tabla, la forma en que se utiliza y el rendimiento que presenta en las consultas y las operaciones de mantenimiento.
Por regla general, se crean particiones en tablas si:
- La tabla contiene, o se espera que contenga, muchos datos que se utilizan de formas diferentes.
- Las consultas o las actualizaciones en la tabla no presentan el rendimiento que se esperaba.
- Si se tiene un arreglo RAID, se puede colocar una partición o Filegroup en cada disco, de tal manera que el acceso se pueda hacer simultaneo
No es recomendable cuando se hacen consultas utilizando datos de varias particiones, ya que será más costoso para el motor de bases de datos ir por fracciones de la información de cada segmente y luego unirlas para presentar el resultado al usuario.
Ejemplos de segmentación de tablas
- En una base de datos de contabilidad, es común que la información de años anteriores sea de sólo consulta, y difícilmente habrá una consulta que involucre más de un año, por lo que pueden crearse particiones por año.
- Pueden existir grupos de productos o servicios que tienen una demanda mayor a la de los demás, por lo que esos registros pueden moverse a una o más particiones independientes, para aislarlos de los demás.
Estrategias de particionamiento
Existen dos maneras principales de hacer la segmentación de tablas:
- Particionamiento manual, hecho y diseñada por el usuario.
- Particionamiento por motor de base de datos. Diseñada por el usuario, hecha por el motor de base de datos.
Particionamiento manual
- Es el usuario quien crea varias tablas físicas para guardar la información de la tabla original:
Se pueden crear tablas haciendo una partición horizontal o por registros (Una tabla para cada subconjunto de registros como la contabilidad del 2017, otra tabla para la contabilidad de 2018, etc.). Esto presupone que no habrá muchas consultas que hagan uso de más de una «partición» ya que en esa situación se tendrían que hacer uniones de tablas. - Vertical, es decir, algunos campos en algunas tablas, todas con el mismo número de registros, y regularmente con la misma llave primaria (DatosGenerales, Domicilios, etc.)
Rompe con reglas de normalización, pero hace eficiente el mantenimiento y consulta.
Implementable en cualquier motor de base de datos. Migrable fácilmente.
Si bien este tipo de segmentación (creando varias tablas para cada «partición») no cumple con las formas normales, si puede hacer, bajo ciertas circunstancias, la consulta y actualización más eficientes.
Como ventaja podemos mencionar que es implementable en cualquier motor de base de datos y su migración es muy sencilla.
Particionamiento por motor de base de datos
Esta implementación es una implementación que configura el DBA y que para el usuario de la base de datos queda en una capa «invisible», por lo que no tiene que hacer ningún cambio o consideración al trabajar con las tablas o índices. Para el usuario todo aparecerá como una sola tabla, aunque en la realidad esté dividida la información en varias particiones.
Cada motor de bases de datos tiene su propia implementación de la segmentación, por lo que se irán revisando algunos motores para conocer la implementación particular de cada uno de ellos.