1. ¿En qué consiste el particionamiento?
  2. Ventajas del particionamiento
  3. ¿Cuando se debe aplicar particionamiento?
  4. Estrategia de particionamiento en Habitissimo. ¿por qué particionamos?
  5. Rendimiento particionamiento vs NO particionamiento
  6. Conclusión
  1. ¿En qué consiste el particionamiento?

El particionamiento se define como la segmentación de la información de una tabla “padre” mediante una serie de criterios en otras tablas conocidas como tablas ”hijas”. Estos criterios pueden ser:

  • Por definiciones concretas
  • Por rangos, que es el caso de Habitissimo.

Dicho de otra manera, el particionamiento es una técnica mediante la cual troceamos una tabla en tablas más pequeñas, en función de unas condiciones.

A modo de ejemplo podríamos particionar la tabla master por cada día y quedaría gráficamente de la siguiente manera:

Hay que indicar que existen básicamente 2 tipos de particionamiento:

  • Horizontal: Segmentar datos por filas
  • Vertical: Segmentar datos por columnas
  1. Ventajas del particionamiento

El particionamiento presenta una serie de ventajas como son:

  • Trabajamos con segmentos de datos más pequeños. Esto hace que las consultas sean más rápidas, debido a que la cantidad de datos que recorrer es inferior
  • Obtenemos índices más pequeños, ya que los índices también se aplican sobre conjuntos de datos más pequeños.
  • Operaciones de mantenimiento más eficientes. Por ejemplo a la hora de borrar datos, basta con borrar las particiones afectadas, lo mismo para el caso de las copias de seguridad.
  1. ¿Cuando aplicar estrategias de particionamiento?

Los beneficios del particionamiento sólo se verán cuando una tabla sea extremadamente grande.

el momento exacto en el que una tabla se beneficiará del particionamiento depende de diversos factores. Sin embargo hay una regla de “facto” que dice que: “el tamaño de la tabla excede la memoria física del servidor”.

El particionamiento es muy útil también para determinar estrategias de datos “calientes” y datos “fríos”. Nos referimos a aquellos datos que se usan de manera habitual y continua y aquellos que no se usan prácticamente nunca:

Esta estrategia la usamos en Habitissimo. En determinadas tablas muy grandes, las particiones con más de 90 días (intervalo de los datos “calientes”) de antigüedad se mueven a un esquema distinto:

  1. Estrategia de particionamiento en Habitissimo. ¿por qué particionamos?

Con el paso del tiempo, las tablas del data-warehouse de Habitissimo (Almacén de datos) han crecido mucho, bien sea  por la inclusión nuevos proyectos o por la información histórica que almacenamos de algunas tablas, haciendo muy difícil trabajar con algunas de estas tablas.

Es en este punto cuando una estrategia de particionamiento toma sentido. En el caso de Habitissimo, el particionamiento por el que apostamos es un particionamiento horizontal por rangos.

Horizontal, porque segmentamos (creamos trozos de información) por filas.

Rangos, porque usamos un intervalo de fechas.

Concretamente en el caso de Habitissimo usamos el ds (date stamp o sello de fecha) que marca la ejecución de las tareas.

Veamos un ejemplo de esto:

Vamos a usar la tabla dim_business como tabla de referencia para mostrar todo lo que hasta ahora hemos comentado.

Como habíamos explicado al comienzo de este artículo, el particionamiento parte de una tabla “padre” (dim business en este caso) y de tantas tablas “hijas” como rangos que vayamos a utilizar.

En nuestro caso las tablas hijas van a contener la parte de la información correspondiente al ds:

La ventaja del particionamiento radica en que en el caso de querer acceder, por ejemplo, a la información correspondiente al día 2021-03-11, solo vamos a acceder a la información de la tabla hija dim_business_20210311, evitando tener que recorrer todas las restantes particiones.

A la hora de borrar se aplica el mismo criterio, si queremos borrar la información correspondiente al día 2021-03-11, solo tenemos que borrar la tabla correspondiente a esa partición, evitando de esta manera tener que recorrer toda la tabla para localizar los registros correspondientes al día en cuestión.

En el caso concreto de dim_business la estrategia de particionamiento se ve reflejada en el siguiente pantallazo:

  1. Rendimiento particionamiento vs NO particionamiento

Para medir los beneficios del particionamiento vamos a lanzar una sencilla consulta sobre una tabla particionada y la tabla equivalente sin particionar.

El objetivo es ver el ahorro en tiempo de ambas ejecuciones.

Ejecutamos una sencilla consulta que nos devuelva el número de registros que hay en un intervalo de fechas concreto.

El resultado es que en el caso de particionamiento, tardamos 3 minutos en obtener el resultado mientras que en la NO particionada tardamos 5 minutos, es decir aproximadamente un 40% más de tiempo.

Esto es debido al hecho de que en el caso de la tabla particionada SOLO recorre las particiones especificadas en el rango de fechas obviando las restantes. En el caso de la tabla NO particionada nos vemos obligados a recorrerla en su totalidad para asegurarnos que hemos seleccionado todos los registros de la condición:

  1. Conclusión

En conclusión, el particionamiento de tablas es una estrategia que intenta organizar los datos en bloques de información más pequeños, en función de la agrupación que hayamos escogido, de esta manera al acceder a bloques de información más pequeños el tiempo para disponer de los datos también se reduce drásticamente.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.