Modelos de fragmentación en clústeres elásticos en Servidor flexible de Azure Database for 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.

Los clústeres elásticos en Azure Database for PostgreSQL servidores flexibles ofrecen dos tipos de particionamiento de datos: basados en filas y basados en esquemas. Cada opción incluye sus propias ventajas, por lo que puede 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. Defina una columna de distribución para determinar el inquilino, que particiona una tabla horizontalmente.

El particionamiento basado en filas es el método más eficaz para hardware. Los nodos del clúster empaquetan y distribuyen inquilinos densamente. 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 aplicación se realicen mediante esa columna. El particionamiento basado en filas funciona bien en las cargas de trabajo de IoT y para lograr el mejor margen fuera del uso de hardware.

Benefits:

  • 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 usa una base de datos compartida y un modelo de esquema independiente. Cada esquema actúa como una partición lógica dentro de la base de datos. Las aplicaciones multiinquilino pueden usar un esquema para cada inquilino para particionar fácilmente a lo largo de la dimensión del inquilino. No es necesario cambiar las consultas, y la aplicación solo requiere una pequeña modificación para establecer el search_path adecuado 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.

Benefits:

  • 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 multi inquilino Esquema independiente para cada arrendatario Tablas compartidas con columnas de identificador de inquilino
Versión de Citus 12.0+ Todas las versiones
Pasos adicionales en comparación con PostgreSQL estándar Ninguno, solo un cambio de configuración Uso create_distributed_table en cada tabla para distribuir y colocar tablas por identificador de inquilino
Número de inquilinos 1-10 000 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 Se puede asignar a ID de inquilino específicos su propio grupo de fragmentos mediante isolate_tenant_to_new_shard