Tabellen maken en distribueren in Azure Cosmos DB for PostgreSQL
VAN TOEPASSING OP: Azure Cosmos DB for PostgreSQL (mogelijk gemaakt door de Citus-database-extensie naar PostgreSQL)
In dit voorbeeld gebruiken we gedistribueerde tabellen van Azure Cosmos DB for PostgreSQL om gebeurtenissen op te slaan en op te vragen die zijn vastgelegd vanuit opensource-inzenders in GitHub.
Vereisten
Als u deze quickstart wilt volgen, moet u eerst het volgende doen:
- Maak een cluster in Azure Portal.
- Maak verbinding met het cluster met psql om SQL-opdrachten uit te voeren.
Tabellen maken
Zodra u verbinding hebt gemaakt via psql, gaan we onze tabel maken. Kopieer en plak de volgende opdrachten in het psql-terminalvenster en druk op Enter om uit te voeren:
CREATE TABLE github_users
(
user_id bigint,
url text,
login text,
avatar_url text,
gravatar_id text,
display_login text
);
CREATE TABLE github_events
(
event_id bigint,
event_type text,
event_public boolean,
repo_id bigint,
payload jsonb,
repo jsonb,
user_id bigint,
org jsonb,
created_at timestamp
);
CREATE INDEX event_type_index ON github_events (event_type);
CREATE INDEX payload_index ON github_events USING GIN (payload jsonb_path_ops);
Let op de GIN-index payload
in github_events
. Met de index kunt u snel query's uitvoeren in de JSONB-kolom. Omdat Citus een PostgreSQL-extensie is, biedt Azure Cosmos DB for PostgreSQL ondersteuning voor geavanceerde PostgreSQL-functies zoals het JSONB-gegevenstype voor het opslaan van semi-gestructureerde gegevens.
Tabellen distribueren
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. Met de functie worden tabellen opgesplitst in shards, die kunnen worden verdeeld over knooppunten voor verbeterde opslag- en rekenprestaties.
Notitie
Wanneer uw workload in echte toepassingen past in 64 vCores, 256 GB RAM- en 2 TB-opslag, kunt u een cluster met één knooppunt gebruiken. In dit geval is het distribueren van tabellen optioneel. Later kunt u tabellen naar behoefte distribueren met behulp van create_distributed_table_concurrently.
Laten we de tabellen distribueren:
SELECT create_distributed_table('github_users', 'user_id');
SELECT create_distributed_table('github_events', 'user_id');
Belangrijk
Het distribueren van tabellen of het gebruik van sharding op basis van schema's is nodig om te profiteren van de prestatiefuncties van Azure Cosmos DB for PostgreSQL. Als u geen tabellen of schema's distribueert, kunnen werkknooppunten u niet helpen bij het uitvoeren van query's met betrekking tot hun gegevens.
Gegevens laden in gedistribueerde tabellen
We zijn klaar om de tabellen te vullen met voorbeeldgegevens. Voor deze quickstart gebruiken we een gegevensset die eerder is vastgelegd vanuit de GitHub-API.
We gaan de pg_azure_storage-extensie gebruiken om de gegevens rechtstreeks vanuit een openbare container in Azure Blob Storage te laden. Eerst moeten we de extensie maken in onze database:
SELECT * FROM create_extension('azure_storage');
Voer de volgende opdrachten uit om de database de voorbeeld-CSV-bestanden op te halen en deze in de databasetabellen te laden.
-- download users and store in table
COPY github_users FROM 'https://pgquickstart.blob.core.windows.net/github/users.csv.gz';
-- download events and store in table
COPY github_events FROM 'https://pgquickstart.blob.core.windows.net/github/events.csv.gz';
U ziet hoe de extensie heeft herkend dat de URL's die aan de kopieeropdracht zijn verstrekt, afkomstig zijn van Azure Blob Storage, de bestanden die we hebben aangegeven, zijn gecomprimeerd met gzip en dat is ook automatisch voor ons afgehandeld.
We kunnen de details van onze gedistribueerde tabellen, inclusief hun grootte, bekijken met de citus_tables
weergave:
SELECT * FROM citus_tables;
table_name | citus_table_type | distribution_column | colocation_id | table_size | shard_count | table_owner | access_method
---------------+------------------+---------------------+---------------+------------+-------------+-------------+---------------
github_events | distributed | user_id | 1 | 388 MB | 32 | citus | heap
github_users | distributed | user_id | 1 | 39 MB | 32 | citus | heap
(2 rows)
Volgende stappen
Nu hebben we tabellen gedistribueerd en geladen met gegevens. Vervolgens gaan we query's uitvoeren in de gedistribueerde tabellen.