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:
- Utwórz klaster w witrynie Azure Portal.
- 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.