El particionamiento por lista pura presenta problemas en dos situaciones: cuando el conjunto de valores de la clave de partición es abierto o se desconoce al momento de crear la tabla, y cuando una distribución de cola larga hace impráctico asignar una partición propia a cada clave de bajo volumen. El particionamiento LIST DEFAULT HASH resuelve ambos problemas. Para ello, combina particiones de lista dedicadas para las claves de alto volumen con subparticiones hash que absorben automáticamente el resto de los datos.
Casos de uso
Elija el particionamiento LIST DEFAULT HASH cuando se cumpla alguna de las condiciones a continuación:
No es posible enumerar todos los valores de la clave de partición: los valores posibles son abiertos o se desconocen cuando crea la tabla.
Distribución de claves de cola larga: unas cuantas claves de alto volumen concentran la mayor parte de los datos, mientras que muchas claves de bajo volumen comparten el resto. Un indicador común es el patrón 80/20: el 20 % de los valores de la clave de partición concentra el 80 % de los datos, y el 80 % de los valores concentra el 20 % restante.
En ambos casos, forzar cada clave de bajo volumen hacia una partición de lista con nombre desperdicia particiones y aumenta la sobrecarga de mantenimiento. El particionamiento LIST DEFAULT HASH le permite asignar particiones de lista dedicadas a las claves de alto volumen y enrutar todo lo demás hacia un conjunto de subparticiones hash que distribuyen la carga de manera uniforme.
Ejemplo multiinquilino
Un sistema de pedidos multiinquilino donde unas cuantas cuentas clave generan la mayor parte de los datos representa un caso típico de uso. La tabla a continuación muestra una distribución representativa:
|
Tenant |
Data volume |
Partition |
|
Key account 1 |
30 million rows |
p1 |
|
Key account 2 |
26 million rows |
p2 |
|
Key account 3 |
24 million rows |
p3 |
|
Key account 4 |
20 million rows |
p4 |
|
Small and medium-sized customers |
30 million rows (combined) |
p_others |
Cada una de las cuatro cuentas clave obtiene una partición de lista dedicada para lograr un acceso rápido y aislado. Todos los clientes restantes se enrutan hacia p_others, la cual cuenta con tres subparticiones hash (DEFAULT PARTITIONS 3) que distribuyen la carga combinada de forma uniforme.
CREATE TABLE cust_orders
(
customer_id VARCHAR(36),
year VARCHAR(60),
order_id INT,
order_content TEXT
) PARTITION BY LIST COLUMNS(customer_id)
(
PARTITION p1 VALUES IN ('Key account 1'),
PARTITION p2 VALUES IN ('Key account 2'),
PARTITION p3 VALUES IN ('Key account 3'),
PARTITION p4 VALUES IN ('Key account 4'),
PARTITION p_others DEFAULT PARTITIONS 3 -- catches all other customer_id values; split into 3 hash sub-partitions
);