Vytváření a distribuce tabulek ve službě Azure Cosmos DB for PostgreSQL

PLATÍ PRO: Azure Cosmos DB for PostgreSQL (využívající rozšíření databáze Citus do PostgreSQL)

V tomto příkladu použijeme distribuované tabulky Azure Cosmos DB for PostgreSQL k ukládání a dotazování událostí zaznamenaných z opensourcových přispěvatelů GitHubu.

Požadavky

Pokud chcete postupovat podle tohoto rychlého startu, musíte nejprve:

  1. Vytvořte cluster na webu Azure Portal.
  2. Připojte se ke clusteru pomocí psql a spusťte příkazy SQL.

Vytváření tabulek

Po připojení přes psql vytvoříme naši tabulku. Zkopírujte a vložte následující příkazy do okna terminálu psql a stisknutím klávesy Enter spusťte:

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

Všimněte si indexu GIN v payload github_eventssouboru . Index umožňuje rychlé dotazování ve sloupci JSONB. Vzhledem k tomu, že Citus je rozšíření PostgreSQL, azure Cosmos DB for PostgreSQL podporuje pokročilé funkce PostgreSQL, jako je datový typ JSONB pro ukládání částečně strukturovaných dat.

Distribuce tabulek

create_distributed_table() je magická funkce, kterou azure Cosmos DB for PostgreSQL poskytuje k distribuci tabulek a používání prostředků napříč několika počítači. Funkce rozloží tabulky do horizontálních oddílů, které je možné rozdělit mezi uzly pro zvýšení výkonu úložiště a výpočetních prostředků.

Poznámka:

V reálných aplikacích můžete v případě, že vaše úloha zapadá do 64 virtuálních jader, 256 GB paměti RAM a 2 TB úložiště, použít cluster s jedním uzlem. V tomto případě je distribuce tabulek nepovinná. Později můžete tabulky podle potřeby distribuovat pomocí create_distributed_table_concurrently.

Pojďme tabulky distribuovat:

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

Důležité

Distribuce tabulek nebo použití horizontálního dělení založeného na schématu je nezbytná k využití funkcí výkonu služby Azure Cosmos DB for PostgreSQL. Pokud tabulky nebo schémata nedistribuujete, pracovní uzly nemůžou pomoct spouštět dotazy týkající se jejich dat.

Načtení dat do distribuovaných tabulek

Jsme připraveni vyplnit tabulky ukázkovými daty. Pro účely tohoto rychlého startu použijeme datovou sadu, která byla dříve zachycena z rozhraní API GitHubu.

K načtení dat přímo z veřejného kontejneru ve službě Azure Blob Storage použijeme rozšíření pg_azure_storage. Nejprve musíme vytvořit rozšíření v naší databázi:

SELECT * FROM create_extension('azure_storage');

Spuštěním následujících příkazů načtěte ukázkové soubory CSV a načtěte je do databázových tabulek.

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

Všimněte si, jak rozšíření rozpoznalo, že adresy URL zadané pro příkaz kopírování pocházejí ze služby Azure Blob Storage, soubory, na které jsme odkazovali, byly komprimované a které se také automaticky zpracovaly za nás.

Podrobnosti o distribuovaných tabulkách, včetně jejich velikostí, si můžeme prohlédnout v citus_tables zobrazení:

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)

Další kroky

Teď máme distribuované tabulky a načetli je s daty. V dalším kroku zkusme spustit dotazy napříč distribuovanými tabulkami.