Delen via


Sharding-modellen op elastische clusters in Azure Database for PostgreSQL (preview)

Sharding is een techniek die wordt gebruikt in databasesystemen en gedistribueerde computing om gegevens horizontaal te partitioneren op meerdere servers of knooppunten. Het omvat het opsplitsen van een grote database of gegevensset in kleinere, beter beheerbare onderdelen, Shards genoemd. Een shard bevat een subset van de gegevens en samen vormen shards de volledige gegevensset.

Elastische clusters op flexibele Server-exemplaren van Azure Database for PostgreSQL bieden twee typen gegevenssharding: op rijen en schema's gebaseerd. Elke optie wordt geleverd met eigen compromissen, zodat u de aanpak kunt kiezen die het beste aansluit bij de vereisten van uw toepassing.

Op rij gebaseerde sharding

Shards-tabellen in het gedeelde schemamodel voor één database, ook wel bekend als sharding op basis van rijen, tenants bestaan naast rijen in dezelfde tabel. De tenant wordt bepaald door een distributiekolom te definiëren, waardoor een tabel horizontaal kan worden gesplitst.

Op rij gebaseerde sharding is de meest efficiënte methode voor hardware. Tenants zijn dicht verpakt en verdeeld over de knooppunten in het cluster. Deze aanpak vereist echter dat alle tabellen in het schema de distributiekolom hebben en dat alle query's in de toepassing op die kolom worden gefilterd. Op rij gebaseerde sharding schijnt in IoT-workloads en voor het bereiken van de beste marge van hardwaregebruik.

Voordelen:

  • Beste prestaties.
  • Beste tenantdichtheid per knooppunt.

Nadelen:

  • Vereist schemawijzigingen.
  • Vereist wijzigingen in toepassingsquery's.
  • Vereist dat alle tenants hetzelfde schema moeten delen.

Op schema gebaseerde sharding

Op schema gebaseerde sharding is de gedeelde database, een afzonderlijk schemamodel en het schema wordt de logische shard binnen de database. Apps met meerdere tenants kunnen een schema per tenant gebruiken om eenvoudig de tenantdimensie te sharden. Querywijzigingen zijn niet vereist en de toepassing heeft slechts een kleine wijziging nodig om de juiste search_path in te stellen bij het schakelen tussen tenants. Sharding op basis van schema's is een ideale oplossing voor microservices en voor ISV's (Onafhankelijke softwareleveranciers) die toepassingen implementeren die niet de wijzigingen kunnen ondergaan die nodig zijn voor het onboarden van sharding op basis van rijen.

Voordelen:

  • Tenants kunnen heterogene schema's hebben.
  • Er zijn geen schemawijzigingen vereist.
  • Er zijn geen wijzigingen in de toepassingsquery vereist.
  • Sql-compatibiliteit op basis van schema's is beter vergeleken met sharding op basis van rijen.

Nadelen:

  • Minder tenants per knooppunt vergeleken met sharding op basis van rijen.

Sharding-compromissen

Op schema gebaseerde sharding Op rij gebaseerde sharding
Multitenancymodel Afzonderlijk schema per tenant Gedeelde tabellen met tenant-id-kolommen
Citus-versie 12.0+ Alle versies
Extra stappen vergeleken met vanille PostgreSQL Geen, alleen een configuratiewijziging Gebruik create_distributed_table voor elke tabel om tabellen per tenant-id te distribueren en te colocate
Aantal tenants 1-10k 1-1 M+
Vereiste voor gegevensmodellering Geen refererende sleutels in gedistribueerde schema's Moet een tenant-id-kolom (een distributiekolom, ook wel een sharding-sleutel genoemd) opnemen in elke tabel en in primaire sleutels, refererende sleutels
SQL-vereiste voor query's met één knooppunt Eén gedistribueerd schema per query gebruiken Joins en WHERE-componenten moeten tenant_id kolom bevatten
Parallelle query's voor meerdere tenants Nr. Ja
Aangepaste tabeldefinities per tenant Ja Nr.
Toegangsbeheer Schemamachtigingen Schemamachtigingen
Gegevens delen tussen tenants Ja, met behulp van referentietabellen (in een afzonderlijk schema) Ja, met behulp van referentietabellen
Tenant naar shard-isolatie Elke tenant heeft een eigen shardgroep per definitie Kan specifieke tenant-id's hun eigen shardgroep geven via isolate_tenant_to_new_shard