Compartir a través de


Modelos de particionamiento en clústeres elásticos en Azure Database for PostgreSQL: Servidor flexible

SE APLICA A: Azure Database for PostgreSQL con servidor flexible

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.

Los clústeres elásticos en el servidor flexible de Azure Database for PostgreSQL ofrecen dos tipos de particionamiento de datos: el basado en filas y el basado en esquemas. Cada opción tiene sus propias ventajas, lo que le permite elegir el enfoque que mejor se adapte a los requisitos de la aplicación.

Particionamiento basado en filas

En las tablas de particiones del modelo de esquema compartido de base de datos única, también conocida como particionamiento basado en filas, 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 el método más eficaz de 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 de la aplicación se filtren por esa columna. 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 consultas de la aplicación.
  • Requiere que todos los inquilinos compartan el mismo esquema.

Particionamiento basado en esquemas

El particionamiento basado en esquemas es la base de datos compartida, un modelo de esquema independiente y 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 (proveedores de software independientes) 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 se requieren modificaciones del esquema.
  • No se requieren modificaciones de consultas de la aplicación.
  • La compatibilidad de SQL con el 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
Definiciones de tablas personalizadas por inquilino 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