Delen via


Sharding-modellen

VAN TOEPASSING OP: Azure Cosmos DB for PostgreSQL (mogelijk gemaakt door de Citus-database-extensie naar PostgreSQL)

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 shards vormen samen de volledige gegevensset.

Azure Cosmos DB for PostgreSQL biedt twee typen gegevenssharding, namelijk op rij en schema gebaseerd. Elke optie wordt geleverd met eigen Sharding-compromissen, zodat u de methode kunt kiezen die het beste aansluit bij de vereisten van uw toepassing.

Op rij gebaseerde sharding

De traditionele manier waarop Azure Cosmos DB for PostgreSQL-shards-tabellen de individuele database, het gedeelde schemamodel ook wel bekend als sharding op basis van rijen, tenants naast elkaar bestaan als rijen in dezelfde tabel. De tenant wordt bepaald door een distributiekolom te definiëren, waardoor een tabel horizontaal kan worden gesplitst.

Op rij gebaseerd is de meest efficiënte manier van sharding. 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 het toepassingsfilter erop zijn 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:

  • Schemawijzigingen vereist
  • Vereist wijzigingen in toepassingsquery's
  • Alle tenants moeten hetzelfde schema delen

Op schema gebaseerde sharding

Beschikbaar met Citus 12.0 in Azure Cosmos DB for PostgreSQL, op schema gebaseerde sharding is de gedeelde database, een afzonderlijk schemamodel, 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 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