Udostępnij za pośrednictwem


Tworzenie i dystrybuowanie tabel w usłudze Azure Cosmos DB for PostgreSQL

DOTYCZY: Usługa Azure Cosmos DB for PostgreSQL (obsługiwana przez rozszerzenie bazy danych Citus do bazy danych PostgreSQL)

W tym przykładzie użyjemy tabel rozproszonych usługi Azure Cosmos DB for PostgreSQL do przechowywania i wykonywania zapytań dotyczących zdarzeń zarejestrowanych przez współautorów typu open source w usłudze GitHub.

Wymagania wstępne

Aby wykonać czynności opisane w tym przewodniku Szybki start, najpierw musisz wykonać następujące czynności:

  1. Utwórz klaster w witrynie Azure Portal.
  2. Połącz się z klastrem za pomocą narzędzia psql, aby uruchomić polecenia SQL.

Utwórz tabele

Po nawiązaniu połączenia za pośrednictwem narzędzia psql utwórzmy naszą tabelę. Skopiuj i wklej następujące polecenia w oknie terminalu programu psql i naciśnij Enter, aby uruchomić:

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);

Zwróć uwagę na indeks GIN w pliku payload .github_events Indeks umożliwia szybkie wykonywanie zapytań w kolumnie JSONB. Ponieważ Citus jest rozszerzeniem PostgreSQL, usługa Azure Cosmos DB for PostgreSQL obsługuje zaawansowane funkcje postgreSQL, takie jak typ danych JSONB do przechowywania danych częściowo ustrukturyzowanych.

Dystrybuowanie tabel

create_distributed_table() to funkcja magic, którą usługa Azure Cosmos DB for PostgreSQL udostępnia w celu dystrybuowania tabel i używania zasobów na wielu maszynach. Funkcja rozkłada tabele na fragmenty, które można rozłożyć między węzły w celu zwiększenia wydajności magazynu i obliczeń.

Uwaga

W rzeczywistych aplikacjach, gdy obciążenie mieści się w 64 rdzeniach wirtualnych, 256 GB pamięci RAM i 2 TB magazynu, można użyć klastra z jednym węzłem. W takim przypadku dystrybucja tabel jest opcjonalna. Później możesz dystrybuować tabele zgodnie z potrzebami przy użyciu create_distributed_table_concurrently.

Rozłóżmy tabele:

SELECT create_distributed_table('github_users', 'user_id');
SELECT create_distributed_table('github_events', 'user_id');

Ważne

Rozpowszechnianie tabel lub używanie fragmentowania opartego na schemacie jest niezbędne do korzystania z funkcji wydajności usługi Azure Cosmos DB for PostgreSQL. Jeśli nie dystrybuujesz tabel ani schematów, węzły procesu roboczego nie mogą pomóc w uruchamianiu zapytań dotyczących ich danych.

Ładowanie danych do tabel rozproszonych

Jesteśmy gotowi wypełnić tabele przykładowymi danymi. W tym przewodniku Szybki start użyjemy zestawu danych przechwyconego wcześniej z interfejsu API usługi GitHub.

Użyjemy rozszerzenia pg_azure_storage, aby załadować dane bezpośrednio z kontenera publicznego w usłudze Azure Blob Storage. Najpierw musimy utworzyć rozszerzenie w naszej bazie danych:

SELECT * FROM create_extension('azure_storage');

Uruchom następujące polecenia, aby baza danych pobierała przykładowe pliki CSV i ładowała je do tabel bazy danych.

-- 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';

Zwróć uwagę, że rozszerzenie rozpoznało, że adresy URL podane do polecenia kopiowania pochodzą z usługi Azure Blob Storage, wskazywane przez nas pliki zostały skompresowane za pomocą narzędzia gzip i zostało również automatycznie obsłużone.

Możemy przejrzeć szczegóły naszych tabel rozproszonych, w tym ich rozmiarów, z citus_tables widokiem:

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)

Następne kroki

Teraz mamy tabele rozproszone i załadowaliśmy je z danymi. Następnie spróbujemy uruchomić zapytania w tabelach rozproszonych.