Curso
¿Qué es la partición de datos? Guía completa para principiantes
Tanto si creas aplicaciones centradas en el cliente como si ejecutas complejos procesos de análisis, una cosa está clara: la forma en que almacenas y accedes a los datos puede mejorar o empeorar el rendimiento.
He visto de primera mano que los sistemas funcionan mucho mejor cuando los datos se estructuran cuidadosamente, y ahí es donde entra en juego la partición de datos. Es una de esas técnicas que pueden mejorar drásticamente la velocidad de consulta, la eficiencia del almacenamiento y la escalabilidad.
En este post, explicaré la partición de datos, los distintos tipos disponibles y las mejores prácticas que he aprendido por el camino.
¿Qué es la Partición de Datos?
La partición de datos es una técnica para dividir grandes conjuntos de datos en trozos más pequeños y manejables, llamados particiones. Cada partición contiene un subconjunto de datos y está distribuida en varios nodos o servidores. Estas particiones pueden almacenarse, consultarse y gestionarse como tablas individuales, aunque lógicamente pertenezcan al mismo conjunto de datos.
La partición de datos mejora el rendimiento y la escalabilidad de la base de datos. Por ejemplo, buscar un punto de datos en toda la tabla lleva más tiempo y consume más recursos que buscarlo en una partición concreta. Por eso los datos se almacenan en particiones.
Tipos de partición de datos
La partición de datos abarca varios tipos, cada uno con una estrategia y unas ventajas únicas. En esta sección, hablo de los tipos más comunes.
Partición horizontal
En lugar de almacenar todos los datos en una sola tabla, la partición horizontal divide los datos en filases decir, diferentes conjuntos de filas se almacenan como particiones.
Todas las particiones de la partición horizontal contienen el mismo conjunto de columnas pero diferentes grupos de filas.
- Ejemplo: Supongamos que tienes un conjunto de datos meteorológicos de varios estados de tres países distintos. Puedes dividirla en tres tablas dividiendog las filas por cada país.
Temperatura |
Estado |
País |
Temporada |
-30° F |
Alaska |
USA |
Invierno |
48.2° F |
Queensland |
Australia |
Verano |
100° F |
Andhra Pradesh |
India |
Verano |
35° F |
California |
USA |
Invierno |
96° F |
Texas |
USA |
Verano |
62° F |
Tasmania |
Australia |
Invierno |
Partición horizontal por país:
Temperatura |
Estado |
País |
Temporada |
-30° F |
Alaska |
USA |
Invierno |
35° F |
California |
USA |
Invierno |
35° F |
California |
USA |
Invierno |
Temperatura |
Estado |
País |
Temporada |
48.2° F |
Queensland |
Australia |
Verano |
62° F |
Tasmania |
Australia |
Invierno |
Temperatura |
Estado |
País |
Temporada |
100° F |
Andhra Pradesh |
India |
Verano |
Tabiquería vertical
Partición vertical divide los datos por columnaspor lo que cada partición contiene el mismo número de filas pero menos columnas.
La clave de partición o columna primaria estará presente en todas las particiones, manteniendo la relación lógica.
La partición vertical es popular cuando la información sensible debe almacenarse separada de los datos normales. Permite guardar las columnas sensibles en una partición y los datos estándar en otra.
Otro caso de uso común es agrupar las columnas que se actualizan con frecuencia en una partición y las restantes en otra.
- Ejemplo: Si las columnas de número de teléfono y salario de los empleados de la tabla siguiente son confidenciales, dividamos la tablaen consecuencia.
Emp_id |
Emp_name |
Designación |
Emp_email |
Emp_phone |
Emp_salary |
z0yu9h |
Alex |
Científico de datos |
alex@yoho.com |
+101 890 456 |
250K |
f8o5pj |
Adam |
Ingeniero de datos |
adam@prodgy.com |
+630 789 365 |
230K |
z006yu |
Matt |
Analista de datos |
matt@oltk.com |
+857 342 937 |
166K |
a6u895 |
Elina |
Ingeniero de operaciones |
elina@wal.com |
+892 494 782 |
190K |
g68w90 |
Joseph |
Ingeniero de software |
joseph@yoho.com |
+852 603 389 |
210K |
Emp_id
es el identificador único en la tabla anterior, por lo que todas las particiones lo tienen.
Partición 1:
Emp_id |
Emp_name |
Designación |
Emp_email |
z0yu9h |
Alex |
Científico de datos |
alex@yoho.com |
f8o5pj |
Adam |
Ingeniero de datos |
adam@prodgy.com |
z006yu |
Matt |
Analista de datos |
matt@oltk.com |
a6u895 |
Elina |
Ingeniero de operaciones |
elina@wal.com |
g68w90 |
Joseph |
Ingeniero de software |
joseph@yoho.com |
Partición 2:
Emp_id |
Emp_phone |
Emp_salary |
z0yu9h |
+101 890 456 |
250K |
f8o5pj |
+630 789 365 |
230K |
z006yu |
+857 342 937 |
166K |
a6u895 |
+892 494 782 |
190K |
g68w90 |
+852 603 389 |
210K |
Partición de rangos
La partición por rangos divide los datos en función de un rango de valores para una columna concreta.
Normalmente, cada partición tiene un límite inferior y superior para la columna clave, y un registro que esté dentro de este rango se asigna a esa partición.
- Ejemplo: Supongamos que se dispone de datos de ventas de 2021 a 2023. Podemos dividirlo por años, de modo que las ventas de 2021 a 2022 entren en una partición y las de 2022 a 2023 en otra.
Product_id |
Fecha |
Beneficios |
z0yu9h |
2021-03-17 |
$100K |
f8o5pj |
2022-04-04 |
$234K |
z006yu |
2022-09-13 |
$789K |
a6u895 |
2021-07-23 |
$237K |
g68w90 |
2022-02-26 |
$2345K |
Partición 1:
product_id |
Fecha |
Beneficios |
z0yu9h |
2021-03-17 |
$100K |
a6u895 |
2021-07-23 |
$237K |
Partición 2:
product_id |
Fecha |
Beneficios |
f8o5pj |
2022-04-04 |
$234K |
z006yu |
2022-09-13 |
$789K |
Partición hash
Se aplica una función hash a la clave de partición, y el resultado determina qué registro debe almacenarse en qué partición. En esta técnica, el número de particiones se decide de antemano.
El resto obtenido al dividir el valor hash por el número de particiones determina en qué partición debe almacenarse ese registro concreto. Veámoslo con un ejemplo:
- Ejemplo: Digamos que, para el producto con ID
z0yu9h
,hash(‘z0yu9h’) = 101
y número de particiones = 4, entonces 101%4 = 1. Por tanto, este registro se almacena en la primera partición.
De esta forma, se calculan los valores hash de la columna clave de partición divididos por el número de particiones, y el resultado determina la partición final.
Partición de listas
El procedimiento es similar a la partición por rangos, pero en lugar de dividir los datos por un rango de valores, la partición por listas divide los datos basándose en un conjunto predefinido de valores.
Vuelve a tomar como ejemplo la tabla de temperaturas.
Temperatura |
Estado |
País |
Temporada |
30° F |
Alaska |
USA |
Invierno |
48.2° F |
Queensland |
Australia |
Verano |
100° F |
Andhra Pradesh |
India |
Verano |
35° F |
California |
USA |
Invierno |
96° F |
Texas |
USA |
Verano |
62° F |
Tasmania |
Australia |
Invierno |
En los datos anteriores, la columna "Temporada" contiene una lista de valores [‘winter’, ‘summer’]
. Por tanto, la partición de la lista en la estación tiene el siguiente aspecto:
Partición 1:
Temperatura |
Estado |
País |
Temporada |
30° F |
Alaska |
USA |
Invierno |
35° F |
California |
USA |
Invierno |
62° F |
Tasmania |
Australia |
Invierno |
Partición 2:
Temperatura |
Estado |
País |
Temporada |
48.2° F |
Queensland |
Australia |
Verano |
100° F |
Andhra Pradesh |
India |
Verano |
96° F |
Texas |
USA |
Verano |
Partición compuesta
Una partición compuesta es una combinación de dos técnicas de partición. Una tabla se divide primero utilizando una estrategia, y cada partición se divide a su vez utilizando otra técnica.
Las estrategias de particionamiento se discuten con frecuencia en las entrevistas técnicas: consulta las principales preguntas de las entrevistas a DBA para 2025.
Casos de uso de la partición de datos
Ahora que hemos evaluado los distintos tipos de estrategias de partición, examinemos cuándo es útil la partición de datos.
Bases de datos distribuidas
Los sistemas distribuidos son conjuntos de nodos ubicados físicamente en servidores distintos, pero conectados entre sí mediante una red. Algunos ejemplos son Apache Cassandra, Amazon DynamoDB y Google Bigtable.
Estos sistemas utilizan internamente la partición de datos para organizarlos y distribuirlos entre los nodos.
Operaciones OLAP
OLAP representa los datos multidimensionales como cubos, lo que permite a los usuarios explorar los datos desde distintos ángulos. Aunque estos cubos representan datos preagregados, los datos subyacentes siguen siendo enormes, por lo que las consultas necesitan una mayor optimización mediante la partición de datos.
Por ejemplo, aplicar la partición de cubos (una técnica de partición de datos) divide los datos en cubos más pequeños en función de criterios específicos. Cuando consultas los datos, la búsqueda se realiza en un cubo concreto saltándose los irrelevantes, lo que reduce las operaciones de E/S.
Del mismo modo, se puede aplicar la partición de dimensiones para dividir los datos por niveles, jerarquías o columnas.
Gestión de registros
Los registros contienen información sobre los eventos, transacciones y operaciones que ocurren en un sistema. Se utilizan para rastrear fallos, errores, casos extremos e incluso mensajes de éxito.
La partición del registro acelera el proceso de depuración y te proporciona la información necesaria más rápidamente. Por ejemplo, si has dividido los registros por periodos de tiempo, puedes recuperarlos fácilmente por fecha, semana, mes o año.
Pipelines de machine learning
En los casos de uso de machine learning, los datos se dividen en conjuntos de entrenamiento, validación y prueba. Este enfoque garantiza que el modelo no reciba información del conjunto de pruebas durante el entrenamiento, para evitar el sobreajuste.
Además, si los datos de entrenamiento son enormes, una sola máquina no puede procesar e introducir todos los datos en un modelo. Así, los datos se dividen en trozos y se introducen en el modelo mediante la partición de datos.
Herramientas para la partición de datos
La partición de datos puede implementarse tanto en bases de datos SQL como NoSQL. Vamos a hablar de ellos en esta sección.
Bases de datos SQL
PostgreSQL
PostgreSQL ofrece soporte integrado para particiones de rango, lista y hash. Por ejemplo, la siguiente consulta crea una partición para cada año para acceder de forma eficiente a los beneficios de las ventas y a las ventas totales de cada ejercicio.
CREATE TABLE sales(
city_id int not null,
sales_year date not null,
total_sales int,
sales_profits int
) PARTITION BY RANGE (sales_year);
MySQL
MySQL admite distintos tipos de partición horizontal, como partición de rango, de lista, de hash y de clave. A partir de ahora (versión 8.4), no admite la partición vertical.
La siguiente consulta MySQL divide los datos de los empleados en tres grupos, p1
, p2
, y p3
, por sus fechas de unión. Todos los trabajadores que se incorporaron antes de 2000 entran en la partición p1
. Los empleados que se incorporaron entre 2000 y 2010 entran en la partición p2
, y los empleados que se incorporaron entre 2010 y 2020 entran en la partición p3
.
CREATE TABLE employee(
firstname VARCHAR(25) NOT NULL,
username VARCHAR(16) NOT NULL,
email VARCHAR(35),
salary INT,
joined DATE NOT NULL
)
PARTITION BY RANGE( YEAR(joined) ) (
PARTITION p1 VALUES LESS THAN (2000),
PARTITION p2 VALUES LESS THAN (2010),
PARTITION p3 VALUES LESS THAN (2020)
);
Microsoft SQL Server
SQL Server ofrece funciones de partición mediante funciones de partición y esquemas de partición. Una función de partición especifica cómo se dividen los datos, mientras que el esquema de partición determina el grupo de archivos donde se almacenará la partición.
En las siguientes consultas:
- Nombre de la función:
sales_by_year
- Nombre del sistema:
sales_filegroup
- Nombres de grupos de archivos:
fg01
,fg02
,fg03
,fg04
Función de partición:
create partition function sales_by_year (date)
as range right for values
('2024-01-01', '2024-02-01', '2024-03-01', ‘2024-04-01’);
Esquema de partición:
CREATE PARTITION SCHEME sales_filegroup
AS PARTITION sales_by_year
TO (fg01, fg02, fg03, fg04);
Aquí, los archivos almacenan los datos de la siguiente manera
fg01
- fechas anteriores a '2024-01-01',fg02
- de "2024-01-01" a "2024-01-31".fg03
- de "2024-02-01" a "2024-02-29".fg04
- de "2024-03-01" a "2024-03-31".
Como mencionamos range right
en la consulta, cada fecha límite se incluye en la siguiente partición.
Si utilizasSQL Server, este tutorial de SQL Server recorre los conceptos y herramientas clave para gestionar datos particionados. Para un itinerario de aprendizaje estructurado, el programa Fundamentos de SQL Server presenta las funciones básicas necesarias para crearbases de datos SQL eficaces.
Bases de datos NoSQL
Amazon DynamoDB
DynamoDB gestiona automáticamente la partición de forma interna. Cuando escribes un elemento en una tabla de DynamoDB, pasa a través de un enrutador de peticiones. El router analiza la clave de partición y aplica una función hash. La salida de la función hash determina la partición concreta donde se almacenará el registro.
Todo este proceso está automatizado dentro de DynamoDB, por lo que el usuario no tiene que preocuparse de la función hash ni de cómo se gestionan las particiones.
Mongodb
MongoDB distribuye los datos entre servidores mediante el concepto de fragmentación. Los datos se particionan en función de una clave de fragmento, que debe elegirse con cuidado para evitar distribuciones desiguales.
Normalmente, la clave del fragmento debe tener una cardinalidad alta y debe ser la columna más utilizada en las consultas. Estas preguntas de la entrevista de MongoDB cubren casi todos lostemas importantes, junto con la fragmentación.
Apache Cassandra
El particionador de Cassandra es un algoritmo hash que determina qué nodo de un clúster debe almacenar una partición concreta. La clave de partición se analiza mediante el algoritmo para producir un token. A continuación, este testigo se compara con los valores de los testigos asignados a los nodos. Por último, los datos se almacenan en el nodo que coincide con el token.
Los algoritmos de partición más comunes son Murmur3Partitioner
, RandomPartitioner
y ByteOrderedPartitioner
.
¿Cómo implementar la partición de datos?
Ahora, vamos a discutir los pasos necesarios para aplicar correctamente la partición de datos.
Paso 1: Comprender los datos y los patrones de acceso
Evalúa a fondo cómo consulta tu aplicación la base de datos, a qué datos se accede con frecuencia, el tamaño de los datos y los cuellos de botella en el rendimiento. Estos conocimientos te ayudarán a definir objetivos claros para la partición y a identificar las columnas clave que intervienen con frecuencia en las operaciones con datos.
Paso 2: Elige una técnica de partición
Ya hemos hablado de las técnicas más comunes, y aquí te explicamos cómo decidir entre ellas:
- Partición horizontal: Cuando tengas millones y miles de millones de filas que se almacenarían en una sola tabla y darían lugar a problemas de memoria, debes elegir la partición horizontal. Almacena un conjunto diferente de filas en tablas distintas.
- Tabiquería vertical: Si se accede con frecuencia a un grupo de columnas y otras se consultan ocasionalmente, puedes implementar la partición vertical para almacenar las columnas por separado en función de sus patrones de acceso.
- Enfoque híbrido: Cuando tengas conjuntos de datos más grandes que requieran que reduzcas el número de filas a la vez que optimizas las consultas para un subconjunto de columnas, debes elegir un enfoque híbrido. Combina las ventajas de la partición horizontal y de la partición vertical.
Paso 3: Crear particiones
A continuación se muestra un ejemplo de consulta SQL para crear particiones utilizando el particionamiento hash.
CREATE TABLE employees (
emp_id INT NOT NULL,
name VARCHAR(30),
hired DATE NOT NULL DEFAULT '2024-01-01',
job_id INT,
location_id INT
)
PARTITION BY HASH(location_id)
PARTITIONS 4;
En el código anterior, la columna "location_id" se pasa a la función hash, y la salida determina la partición a la que debe asignarse el registro. La línea de código partitions 4
especifica el número total de particiones que deben crearse.
Guarda en favoritos esta práctica hoja de trucos de los fundamentos de SQL paraconsultar la sintaxis básica de SQL mientras implementas las particiones.
Paso 4: Monitorizar y optimizar particiones
- Controla continuamente tus operaciones de datos y asegúrate de que las particiones están actualizadas y son válidas.
- A medida que la aplicación se amplíe, puede que necesites añadir más particiones o elegir un enfoque diferente, como una partición híbrida, para adaptarte a las demandas cambiantes.
- Asegúrate de que el tamaño de la partición y la estrategia benefician a las operaciones frecuentes realizadas en la base de datos.
- Asegúrate de que los datos están distribuidos uniformemente entre las particiones; de lo contrario, puede que tengas que reequilibrarlos.
Retos y consideraciones para la partición de datos
Las optimizaciones conllevan ventajas y desventajas, como todo en el mundo del software. Éstos son los que debes tener en cuenta:
- Desviación de la partición: La desviación de particiones significa que unas pocas particiones reciben más datos y trabajo de procesamiento, mientras que otras suelen permanecer inactivas. Para evitarlo, elige la clave de partición adecuada y una estrategia que distribuya uniformemente los datos entre todas las particiones.
- Gastos generales de mantenimiento: A medida que crecen los datos, tienes que reevaluar las estrategias de partición existentes y asegurarte de que son pertinentes para los datos actuales. Si no es así, puede que tengas que reparticionar o fusionar particiones.
- Migraciones de datos: En caso de migrar tus datos a una nueva arquitectura, hay que tener especial cuidado para garantizar que las particiones sean compatibles con el nuevo entorno. Además, mover datos entre particiones implica complejidades como la gestión de la coherencia de los datos entre fragmentos.
- Curva de aprendizaje pronunciada: La partición de datos añade complejidad a la arquitectura de un sistema o nube. No son fáciles de consultar, migrar o analizar, lo que supone una curva de aprendizaje muy pronunciada para los principiantes.
Buenas prácticas para la partición de datos
Como puedes ver, la partición de datos se vuelve compleja a medida que crece el volumen de datos. Sin embargo, la aplicación de estas prácticas garantizará que la partición mejore la eficacia sin afectar al rendimiento.
- Alinea las particiones con los patrones de consulta: Elegir la estrategia de partición y la clave de partición adecuadas puede mejorar significativamente el rendimiento de la base de datos. Comprende las operaciones de datos y los patrones de consulta más habituales en tu base de datos, y selecciona una clave de partición que intervenga frecuentemente en las consultas, garantizando al mismo tiempo una distribución uniforme de los datos.
- Vigila regularmente: Hoy en día, las aplicaciones son dinámicas y evolucionan constantemente con tendencias y demandas cambiantes. Por tanto, es importante controlar regularmente tus particiones para alinearlas con los patrones de acceso actuales y volver a particionarlas cuando sea necesario.
- Minimiza los gastos generales: Gestionar manualmente las particiones a gran escala es complejo. Sin embargo, las bases de datos NoSQL como Apache Cassandra y Amazon DynamoDB automatizan el proceso sin requerir mucho trabajo adicional. Además, algunas herramientas de automatización ajustan las particiones a medida que los datos escalan, permitiendo reparticionar o fusionar particiones según tus necesidades.
Conclusión
Una partición eficaz de los datos es fundamental para mantener el rendimiento y la escalabilidad a medida que crecen tus datos. Con la estrategia adecuada, puedes reducir la latencia de las consultas, optimizar el almacenamiento y simplificar el mantenimiento. Es un paso práctico con un impacto medible.
Para profundizar en cómo la partición permite escalar los sistemas distribuidos, consulta esta guía sobre las particiones de Kafka. Para comprender cómo influyen las estructuras relacionales en las decisiones de partición, empieza con este curso de bases de datos relacionales.
Conviértete en Ingeniero de Datos
Srujana es una redactora técnica autónoma con una licenciatura de cuatro años en Informática. Escribir sobre diversos temas, como la ciencia de datos, la computación en la nube, el desarrollo, la programación, la seguridad y muchos otros, le resulta natural. Le encanta la literatura clásica y explorar nuevos destinos.
Aprende más sobre el diseño de bases de datos con estos cursos
Curso
Introducción a SQL Server
Curso
Diseño de bases de datos
blog
¿Qué es la gestión de datos? Guía práctica con ejemplos

Tim Lu
12 min

blog
¿Qué es el análisis de datos? Una guía experta con ejemplos
blog
¿Qué es una base de datos de grafos? Guía para principiantes
blog
Contratos de datos desmitificados: Todo lo que necesitas saber

Mike Shakhomirov
11 min
Tutorial
Tipos de datos en Excel y sus usos: Guía completa

Laiba Siddiqui
9 min
Tutorial
Cuentas de almacenamiento Azure: Tutorial paso a paso para principiantes

Anneleen Rummens
11 min