Compartir a través de


Particionado de datos

Prácticamente cualquier aplicación hoy en día necesita disponer de algún sitio de almacenamiento. Dentro de la plataforma Azure existen dos alternativas, perfectamente compatibles, que son Windows Azure Storage y SQL Azure.

En este punto se abordará el concepto de particionado de datos, particionado que muchas veces es necesario de el diseño de aplicaciones con un requisito de escalabilidad y cómo es posible dicha acción en los dos sistemas de almacenamiento.

Windows Azure Storage

El servicio de tablas de Windows Azure proporciona almacenamiento estructurado no relacional basado en tablas.

Una entidad dentro de las tablas de Windows Azure se define de manera única con dos propiedades.

La primera propiedad es la clave de la partición, PartitionKey, que identifica a que partición pertenece una entidad. La única garantía que existe sobre las particiones, es que, acceder a entidades almacenadas en la misma partición va a tener, típicamente, un menor coste que acceder a entidades en particiones diferentes.

La segunda propiedad es la clave de la entidad, EntityKey, que identifica de manera unívoca una entidad dentro de una partición.

Por tanto, definir correctamente el PartitionKey puede influir enormemente en el rendimiento de la aplicación, ya que este valor determina la ubicación física de una entidad. Es importante poner cuidado a la hora de elegir la clave de partición de las entidades para asegurar que entidades que se acceden típicamente al mismo tiempo comparten la misma clave de partición. También es importante que las particiones sean homogéneas en tamaño.

Por ejemplo, si se almacenan clientes, una posible clave de partición podría ser el código postal, si típicamente la aplicación trabaja con los clientes de un determinado código postal, por ejemplo para realizar estadísticas.

SQL Azure

El particionado es una técnica por la cuál se divide la información de una base de datos en subconjuntos más pequeños de información que distribuyen entre múltiples base de datos para mejorar aspectos como la manejabilidad, la disponibilidad o la escalabilidad.

Una de las ventajas del particionado es el posible aumento de rendimiento que puede obtenerse paralelizando tareas que usan diferentes servidores de datos, aunque también dispone de desventajas, como que aumenta el coste de mantenimiento y la complejidad de la aplicación, ya que en lugar de existir una base de datos existen varias.

Por ejemplo, en aplicaciones dónde pueda haber procesos de carga masiva el particionado puede ser una alternativa, ya que podrían paralelizarse las tareas a realizar.

Otro escenario posible puede ser en aquellas aplicaciones que puedan necesitar más del almacenamiento permitido por SQL Azure, más de 50 Gb. En este caso, si se desea utilizar SQL Azure como sistema de almacenamiento, sería necesario utilizar un sistema de particionado.

Existen diversas técnicas de particionado pero básicamente el particionado puede realizarse de forma horizontal o vertical. La elección a elegir depende de la aplicación y de la forma en que ésta consultará la información.

En cualquier de los dos casos, el proceso de particionado no es un proceso transparente para la aplicación y éste debe conocer el particionado para poder realizar las consultas necesarias.

El particionado vertical lo que hace es dividir una tabla en función de sus columnas. Una tabla con múltiples columnas se divide y se llevan unas determinas columnas a una tabla y otras a otra, relacionando toda a través de la clave primaria.

Otra alternativa de particionado vertical es dividir la base de datos por las tablas, llevando unas tablas a una determinada base de datos y otras tablas a otra.

Por ejemplo, si un cliente tiene varias direcciones de correo, la tabla se puede dividir poniendo la dirección principal de una tabla y el resto de direcciones en otra tabla. La mayoría de las consultas emplearán la tabla de direcciones principal y otras pocas consultas requerirán del resto de direcciones.


Figura 1.- Particionado vertical

El particionado horizontal divide las tablas a través de una determinada clave. Existirá una tabla maestra para poder conocer dónde se encuentra la información asociada a una determina clave.

Habitualmente este es el sistema empleado cuando quiere dividirse la información entre múltiples instancias de base de datos SQL Azure. En este caso el schema de la base de datos es el mismo en todas las instancias existentes y lo que varía es la información que residen en ella.

A continuación se muestra un ejemplo de un escenario dónde la información se divide en múltiples base de datos en función del año. Debe existir una tabla maestra que indique para cada año dónde está su información.


Figura 2.- Particionado vertical