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:
- Vytvořte cluster na webu Azure Portal.
- 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_events
souboru . 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.