Modelli di partizionamento orizzontale

SI APPLICA A: Azure Cosmos DB for PostgreSQL (basato su estensione database Citus per PostgreSQL)

Il partizionamento orizzontale è una tecnica usata nei sistemi di database e nell'elaborazione distribuita per partizionare orizzontalmente i dati tra più server o nodi. Comporta la suddivisione di un database o di un set di dati di grandi dimensioni in parti più piccole e gestibili denominate partizioni. Una partizione contiene un subset dei dati e insieme le partizioni formano il set di dati completo.

Azure Cosmos DB for PostgreSQL offre due tipi di partizionamento orizzontale dei dati, ovvero basati su righe e basati su schema. Ogni opzione comprende determinati compromessi di partizionamento orizzontale, consentendo di scegliere l'approccio più adatto ai requisiti dell'applicazione.

Partizionamento orizzontale basato su righe

Il modo tradizionale in cui le tabelle di partizioni di Azure Cosmos DB for PostgreSQL è il database singolo, il modello di schema condiviso noto anche come partizionamento orizzontale basato su righe, e i tenant coesistono come righe all'interno della stessa tabella. Il tenant è determinato mediante la determinazione di una colonna di distribuzione, che consente di dividere una tabella orizzontalmente.

Il tipo basato su righe è il modo più efficiente di partizionamento orizzontale hardware. I tenant sono densamente compressi e distribuiti tra i nodi del cluster. Questo approccio richiede tuttavia la certezza che tutte le tabelle nello schema abbiano la colonna di distribuzione e che tutte le query nel filtro dell'applicazione vengano filtrate in base a essa. Il partizionamento orizzontale basato su righe è ideale per i carichi di lavoro IoT e riesce a ottenere il miglior margine di utilizzo dell'hardware.

Vantaggi:

  • Prestazioni ottimali
  • Migliore densità del tenant per nodo

Svantaggi:

  • Richiede modifiche allo schema
  • Richiede modifiche alle query dell'applicazione
  • Tutti i tenant devono condividere lo stesso schema

Partizionamento orizzontale basato su schema

Disponibile con Citus 12.0 in Azure Cosmos DB for PostgreSQL, il partizionamento orizzontale basato su schema è il database condiviso, un modello di schema separato, in cui lo schema diventa la partizione logica all'interno del database. Le app multi-tenant possono usare uno schema per tenant per eseguire facilmente la partizione lungo la dimensione del tenant. Le modifiche alle query non sono necessarie e l'applicazione richiede solo una piccola modifica per impostare il search_path appropriato per la commutazione del tenant. Il partizionamento orizzontale basato su schema è una soluzione ideale per i microservizi e per gli ISV che distribuiscono applicazioni e che non possono subire le modifiche necessarie per eseguire l'onboarding del partizionamento orizzontale basato su righe.

Vantaggi:

  • I tenant possono avere schemi eterogenei
  • Nessuna modifica dello schema necessaria
  • Non sono necessarie modifiche alle query dell'applicazione
  • Migliore compatibilità SQL del partizionamento orizzontale basato su schema rispetto al partizionamento orizzontale basato su righe

Svantaggi:

  • Numero di tenant per nodo minore rispetto al partizionamento orizzontale basato su righe

Compromessi del partizionamento orizzontale

Partizionamento orizzontale basato su schema Partizionamento orizzontale basato su righe
Modello multi-tenancy Schema separato per tenant Tabelle condivise con colonne ID tenant
Versione Citus 12.0+ Tutte le versioni
Passaggi aggiuntivi raffrontati con Vanilla PostgreSQL Nessuno, solo una modifica di configurazione Usare create_distributed_table in ogni tabella per distribuire e raggruppare le tabelle in base all'ID tenant
Numero di tenant 1-10k 1-1 M+
Requisito di modellazione dei dati Nessuna chiave esterna tra schemi distribuiti È necessario includere una colonna ID tenant (una colonna di distribuzione, nota anche come chiave di partizionamento) in ogni tabella e nelle chiavi primarie e chiavi esterne
Requisito SQL per le query a nodo singolo Usare un singolo schema distribuito per query I join e le clausole WHERE devono includere una colonna tenant_id
Query tra tenant parallele No
Definizioni di tabella personalizzate per tenant No
Controllo di accesso Autorizzazioni per schema Autorizzazioni per schema
Condivisione dei dati tra tenant Sì, usando tabelle di riferimento (in uno schema separato) Sì, usando tabelle di riferimento
Isolamento da tenant a partizione Ogni tenant ha un proprio gruppo di partizioni per definizione Può assegnare ID tenant specifici al proprio gruppo di partizioni tramite isolate_tenant_to_new_shard