
Una partición es una división de una base de datos lógica o sus elementos constituyentes en partes independientes y distintas. El particionamiento de bases de datos se refiere a la división intencional de una base de datos grande en otras más pequeñas para fines de escalabilidad, a diferencia de las particiones de red , que son un tipo de fallo de red entre nodos. [ 1 ] En una base de datos particionada, cada dato pertenece a una única partición, lo que convierte a cada partición en una pequeña base de datos independiente. [ 1 ] El particionamiento de bases de datos se realiza normalmente por razones de gestión, rendimiento o disponibilidad [ 2 ] , o para el equilibrio de carga . Es común en sistemas de gestión de bases de datos distribuidas , donde cada partición puede estar distribuida entre varios nodos, y los usuarios de cada nodo realizan transacciones locales en la partición. Esto aumenta el rendimiento para sitios que tienen transacciones regulares que involucran ciertas vistas de datos, al tiempo que se mantiene la disponibilidad y la seguridad.
El particionamiento permite distribuir conjuntos de datos entre varios discos y cargas de consulta entre varios procesadores. Para las consultas que operan en una sola partición, cada nodo ejecuta las consultas de forma independiente en su partición local, lo que permite un escalado lineal del rendimiento de las consultas con nodos adicionales. Las consultas más complejas pueden paralelizarse en varios nodos, aunque esto presenta desafíos adicionales. [ 1 ]
Historia
La partición de bases de datos surgió en la década de 1980 con sistemas como Teradata y NonStop SQL . Posteriormente, este enfoque fue adoptado por bases de datos NoSQL y almacenes de datos basados en Hadoop . Si bien las implementaciones varían entre cargas de trabajo transaccionales y analíticas , los principios básicos de la partición se mantienen constantes en ambos casos de uso. [ 1 ]
Terminología
Los distintos sistemas de gestión de bases de datos (DBMS) [ 3 ] utilizan terminología variada para el particionamiento:
Particionamiento y replicación
El particionamiento se implementa comúnmente junto con la replicación , almacenando copias de particiones en múltiples nodos. Cada registro pertenece a una partición, pero puede existir en varios nodos para garantizar la tolerancia a fallos. En los sistemas de replicación líder-seguidor , los nodos pueden funcionar simultáneamente como líderes para algunas particiones y seguidores para otras. [ 1 ]
Balanceo de carga y puntos de acceso
El particionamiento tiene como objetivo distribuir uniformemente la carga de datos y consultas entre los nodos. Con una distribución ideal, la capacidad del sistema aumenta linealmente con la adición de nodos: diez nodos deberían procesar diez veces más datos y rendimiento que un solo nodo. Una distribución desigual, denominada asimetría , reduce la eficiencia del particionamiento. Las particiones con carga excesiva se denominan puntos calientes . [ 1 ]
Existen varias estrategias para abordar los puntos críticos:
- Asignación aleatoria de registros a los nodos, a costa de una mayor complejidad en la recuperación.
- Particionamiento de rangos de claves con límites optimizados
- Particionamiento basado en hash para una distribución uniforme de la carga [ 1 ]
Criterios de partición
Los sistemas de gestión de bases de datos relacionales de gama alta actuales ofrecen diferentes criterios para dividir la base de datos. Toman una clave de partición y asignan una partición en función de ciertos criterios. Algunos criterios comunes incluyen:
- Particionamiento de rangos : asigna rangos de claves continuas a particiones, análogos a los volúmenes de una enciclopedia. Los límites de rango conocidos permiten el enrutamiento directo de solicitudes. Los límites se pueden establecer de forma manual o automática para una distribución equilibrada. Si bien esto permite escaneos de rango eficientes, ciertos patrones de acceso crean puntos críticos. Por ejemplo, en redes de sensores que utilizan claves de marca de tiempo, las escrituras se concentran en la partición del período de tiempo actual. El uso de claves compuestas, como anteponer a las marcas de tiempo los identificadores de los sensores, puede distribuir esta carga. [ 1 ] Un ejemplo podría ser una partición para todas las filas donde la columna "código postal" tenga un valor entre 70000 y 79999.
- Particionamiento por lista : a una partición se le asigna una lista de valores. Si la clave de partición tiene uno de estos valores, se elige la partición. Por ejemplo, todas las filas donde la columna
CountryseaIceland,Norway,Sweden,FinlandoDenmarkpodrían construir una partición para los países nórdicos . - Particionamiento compuesto : permite ciertas combinaciones de los esquemas de particionamiento anteriores, por ejemplo, aplicando primero un particionamiento por rango y luego un particionamiento por hash. El hash consistente podría considerarse un compuesto de particionamiento por hash y por lista, donde el hash reduce el espacio de claves a un tamaño que se puede listar.
- Particionamiento round-robin : la estrategia más sencilla, que garantiza una distribución uniforme de los datos. Con
nparticiones, laitupla i en orden de inserción se asigna a la partición j(i mod n). Esta estrategia permite el acceso secuencial a una relación en paralelo. Sin embargo, el acceso directo a tuplas individuales, basado en un predicado, requiere acceder a toda la relación. - Particionamiento hash : aplica una función hash para convertir datos sesgados en distribuciones uniformes , logrando así una distribución de carga homogénea entre las particiones. Si bien esto previene eficazmente los puntos críticos, sacrifica la eficiencia de las consultas de rango, ya que las claves adyacentes se dispersan entre las particiones. Las implementaciones comunes incluyen MD5 en Cassandra y MongoDB . Algunos sistemas, como Cassandra, combinan enfoques utilizando claves primarias compuestas: se aplica el hash al primer componente para el particionamiento, manteniendo el orden de clasificación para los componentes restantes dentro de las particiones. [ 1 ]
En cualquier esquema de particionamiento, los datos se organizan normalmente de forma que cada dato (registro, fila o documento) pertenezca a una única partición. [ 1 ] Si bien algunas bases de datos admiten operaciones que abarcan varias particiones, esta asociación a una sola partición es fundamental para el concepto de particionamiento.
Métodos de particionamiento
La partición se puede realizar creando bases de datos más pequeñas e independientes (cada una con sus propias tablas , índices y registros de transacciones ), o dividiendo elementos seleccionados, por ejemplo, una sola tabla.
Particionamiento horizontal
La partición horizontal consiste en colocar diferentes filas en tablas distintas. Por ejemplo, los clientes con códigos postales inferiores a 50000 se almacenan en CustomersEast, mientras que los clientes con códigos postales iguales o superiores a 50000 se almacenan en CustomersWest. Las dos tablas de partición son entonces CustomersEast y CustomersWest, y se puede crear una vista mediante la unión de ambas para obtener una visión completa de todos los clientes.
Particionamiento vertical
El particionamiento vertical implica crear tablas con menos columnas y usar tablas adicionales para almacenar las columnas restantes. [ 2 ] Generalmente, esta práctica se conoce como normalización . Sin embargo, el particionamiento vertical va más allá y particiona columnas incluso cuando ya están normalizadas. Este tipo de particionamiento también se llama "división de filas", ya que las filas se dividen por sus columnas, y puede realizarse de forma explícita o implícita. Se pueden usar máquinas físicas distintas para realizar el particionamiento vertical: almacenar columnas poco utilizadas o muy anchas, que ocupan una cantidad significativa de memoria, en una máquina diferente, por ejemplo, es un método de particionamiento vertical. Una forma común de particionamiento vertical es separar los datos estáticos de los datos dinámicos, ya que el acceso a los primeros es más rápido que al de los segundos, particularmente para una tabla donde los datos dinámicos no se usan con tanta frecuencia como los estáticos. Crear una vista a través de las dos tablas recién creadas restaura la tabla original con una penalización de rendimiento, pero acceder solo a los datos estáticos mostrará un mayor rendimiento. Una base de datos columnar puede considerarse como una base de datos que ha sido particionada verticalmente hasta que cada columna se almacena en su propia tabla.
Véase también
Referencias
- 1 2 3 4 5 6 7 8 9 10 11 Kleppmann, Martin (2017). Diseño de aplicaciones intensivas en datos: Las grandes ideas detrás de los sistemas fiables, escalables y mantenibles . O'Reilly Media. págs. 199–200 . ISBN 9781491903100.
- 1 2 "Algoritmos de particionamiento vertical para el diseño de bases de datos" , por Shamkant Navathe, Stefano Ceri, Gio Wiederhold y Jinglie Dou, Universidad de Stanford, 1984
- ↑ No confundir con una base de datos , que es el repositorio independiente de datos byte a byte (en lugar de un conjunto de convenciones o reglas que describen cómo cambiar esos datos medianteoperaciones de creación, lectura, actualización o eliminación ).
- Particionamiento de datos
- Sistemas de gestión de bases de datos