Modelos de particionamiento
SE APLICA A: Azure Cosmos DB for PostgreSQL (con tecnología de la extensión de base de datos de Citus en PostgreSQL)
El particionamiento es una técnica que se usa en sistemas de base de datos y computación distribuida para particionar horizontalmente los datos entre varios servidores o nodos. Implica dividir una base de datos o un conjunto de datos de gran tamaño en partes más pequeñas y manejables denominadas particiones. Una partición contiene un subconjunto de los datos, y las particiones juntas forman el conjunto de datos completo.
Azure Cosmos DB for PostgreSQL ofrece dos tipos de particionamiento de datos, es decir, basados en filas y basados en esquemas. Cada opción incluye sus propias desventajas de particionamiento, lo que le permite elegir el enfoque que mejor se alinea con los requisitos de la aplicación.
Particionamiento basado en filas
La forma tradicional en que Azure Cosmos DB for PostgreSQL particiona las tablas es el modelo de base de datos única y esquema compartido, también conocido como particionamiento basado en filas, en el que los inquilinos coexisten como filas dentro de la misma tabla. El inquilino se determina mediante la definición de una columna de distribución, que permite dividir horizontalmente una tabla.
El particionamiento basado en filas es la forma más eficaz de particionar el hardware. Los inquilinos se empaquetan y distribuyen de forma densa entre los nodos del clúster. Sin embargo, este enfoque requiere asegurarse de que todas las tablas del esquema tengan la columna de distribución y que todas las consultas del filtro de la aplicación se realicen mediante él. El particionamiento basado en filas brilla en las cargas de trabajo de IoT y para lograr el mejor margen fuera del uso de hardware.
Ventajas:
- Mejor rendimiento
- Mejor densidad de inquilinos por nodo
Inconvenientes:
- Requiere modificaciones de esquema
- Requiere modificaciones de consulta de aplicación
- Todos los inquilinos deben compartir el mismo esquema
Particionamiento basado en esquemas
Disponible con Citus 12.0 en Azure Cosmos DB for PostgreSQL, el particionamiento basado en esquemas es la base de datos compartida, el modelo de esquema independiente, el esquema se convierte en la partición lógica dentro de la base de datos. Las aplicaciones multiinquilino pueden usar un esquema por inquilino para particionar fácilmente a lo largo de la dimensión del inquilino. Los cambios de consulta no son necesarios y la aplicación solo necesita una pequeña modificación para establecer la search_path adecuada al cambiar de inquilino. El particionamiento basado en esquemas es una solución ideal para microservicios y para ISV que implementan aplicaciones que no pueden someterse a los cambios necesarios para incorporar particiones basadas en filas.
Ventajas:
- Los inquilinos pueden tener esquemas heterogéneos
- No requiere modificaciones de esquema
- No requiere modificaciones de consulta de aplicación
- La compatibilidad de SQL de particionamiento basado en esquemas es mejor en comparación con el particionamiento basado en filas
Inconvenientes:
- Menos inquilinos por nodo en comparación con el particionamiento basado en filas
Desventajas de particionamiento
Particionamiento basado en esquemas | Particionamiento basado en filas | |
---|---|---|
Modelo multiinquilino | Esquema independiente por inquilino | Tablas compartidas con columnas de identificador de inquilino |
Versión de Citus | 12.0+ | Todas las versiones |
Pasos adicionales, en comparación con PostgreSQL vainilla | Ninguno, solo un cambio de configuración | Uso de create_distributed_table en cada tabla para distribuir y colocar tablas por identificador de inquilino |
Número de inquilinos | 1-10k | 1-1 M+ |
Requisito del modelado de datos | No hay claves externas entre esquemas distribuidos | Debe incluir una columna de identificador de inquilino (una columna de distribución, también conocida como clave de particionamiento) en cada tabla y en claves principales, claves externas |
Requisito de SQL para las consultas de nodo único | Uso de un único esquema distribuido por consulta | Las combinaciones y las cláusulas WHERE deben incluir la columna tenant_id |
Consultas paralelas entre inquilinos | No | Sí |
Definiciones de tablas personalizadas por inquilino | Sí | No |
Control de acceso | Permisos de esquema | Permisos de esquema |
Uso compartido de datos entre inquilinos | Sí, mediante tablas de referencia (en un esquema independiente) | Sí, mediante tablas de referencia |
Aislamiento de inquilino para particiones | Cada inquilino tiene su propio grupo de particiones por definición | Puede proporcionar identificadores de inquilino específicos a su propio grupo de particiones a través de isolate_tenant_to_new_shard |