Share via


Basisconcepten voor schalen in Azure Cosmos DB for PostgreSQL

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

Voordat we de stappen voor het bouwen van een nieuwe app onderzoeken, is het handig om een kort overzicht te zien van de betrokken termen en concepten.

Architectuuroverzicht

Azure Cosmos DB for PostgreSQL biedt u de kracht om tabellen en/of schema's over meerdere computers in een cluster te distribueren en deze transparant op dezelfde manier op te vragen als u postgreSQL opvraagt:

Diagram of the coordinator node sharding a table onto worker nodes.

In de Azure Cosmos DB for PostgreSQL-architectuur zijn er meerdere soorten knooppunten:

  • Het coördinatorknooppunt slaat gedistribueerde tabelmetagegevens op en is verantwoordelijk voor gedistribueerde planning.
  • De werkknooppunten slaan daarentegen de werkelijke gegevens, metagegevens op en voeren de berekening uit.
  • Zowel de coördinator als de werkrollen zijn gewone PostgreSQL-databases, waarbij de citus extensie is geladen.

Als u een normale PostgreSQL-tabel wilt distribueren, zoals campaigns in het bovenstaande diagram, voert u een opdracht uit met de naam create_distributed_table(). Zodra u deze opdracht uitvoert, maakt Azure Cosmos DB for PostgreSQL transparant shards voor de tabel tussen werkknooppunten. In het diagram worden shards weergegeven als blauwe vakken.

Als u een normaal PostgreSQL-schema wilt distribueren, voert u de citus_schema_distribute() opdracht uit. Zodra u deze opdracht hebt uitgevoerd, worden tabellen in dergelijke schema's in Azure Cosmos DB voor PostgreSQL transparant omgezet in één shardkommatabel die als een eenheid tussen knooppunten van het cluster kunnen worden verplaatst.

Notitie

Op een cluster zonder werkknooppunten bevinden shards van gedistribueerde tabellen zich op het coördinatorknooppunt.

Shards zijn gewone (maar speciaal benoemde) PostgreSQL-tabellen die segmenten van uw gegevens bevatten. In ons voorbeeld, omdat we gedistribueerd campaigns door company_id, houden de shards campagnes vast, waarbij de campagnes van verschillende bedrijven worden toegewezen aan verschillende shards.

Distributiekolom (ook wel shardsleutel genoemd)

create_distributed_table() is de magische functie die Azure Cosmos DB for PostgreSQL biedt voor het distribueren van tabellen en het gebruik van resources op meerdere computers.

SELECT create_distributed_table(
	'table_name',
	'distribution_column');

Het tweede argument hierboven kiest een kolom uit de tabel als een distributiekolom. Dit kan elke kolom zijn met een systeemeigen PostgreSQL-type (waarbij gehele getallen en tekst het meest worden gebruikt). De waarde van de distributiekolom bepaalt welke rijen naar welke shards gaan. Daarom wordt de distributiekolom ook wel de shardsleutel genoemd.

Azure Cosmos DB for PostgreSQL bepaalt hoe query's worden uitgevoerd op basis van het gebruik van de shardsleutel:

Query omvat Waar deze wordt uitgevoerd
slechts één shardsleutel op het werkknooppunt dat de shard bevat
meerdere shardsleutels geparallelliseerd over meerdere knooppunten

De keuze van de shardsleutel bepaalt de prestaties en schaalbaarheid van uw toepassingen.

  • Ongelijke gegevensdistributie per shardsleutel (ook wel gegevensverschil genoemd) is niet optimaal voor prestaties. Kies bijvoorbeeld geen kolom waarvoor één waarde 50% van de gegevens vertegenwoordigt.
  • Shardsleutels met lage kardinaliteit kunnen de schaalbaarheid beïnvloeden. U kunt slechts zoveel shards gebruiken als er afzonderlijke sleutelwaarden zijn. Kies een sleutel met kardinaliteit in de honderden tot duizenden.
  • Het samenvoegen van twee grote tabellen met verschillende shardsleutels kan traag zijn. Kies een algemene shardsleutel voor grote tabellen. Meer informatie over colocatie.

Colocatie

Een ander concept dat nauw samenhangt met de shardsleutel is colocatie. Tabellen die zijn geshard door dezelfde distributiekolomwaarden, worden opgeslagen in dezelfde werkrollen. De shards van tabellen met een puntkomma worden samen opgeslagen op dezelfde werkrollen.

Hieronder ziet u twee tabellen die met dezelfde sleutel zijn geshard, site_id. Ze staan op een punt.

Diagram of tables http_request and http_request_1min colocated by site_id.

Azure Cosmos DB for PostgreSQL zorgt ervoor dat rijen met een overeenkomende site_id waarde in beide tabellen worden opgeslagen op hetzelfde werkknooppunt. U kunt zien dat rijen site_id=1 met beide tabellen zijn opgeslagen op werkrol 1. Op dezelfde manier voor andere site-id's.

Met colocatie kunt u JOI's in deze tabellen optimaliseren. Als u de twee tabellen site_idaan elkaar koppelt, kan Azure Cosmos DB for PostgreSQL de join lokaal uitvoeren op werkknooppunten zonder gegevens tussen knooppunten te versnipperen.

Tabellen binnen een gedistribueerd schema worden altijd met elkaar verbonden.

Volgende stappen