Creare e distribuire tabelle in Azure Cosmos DB for PostgreSQL
SI APPLICA A: Azure Cosmos DB for PostgreSQL (con tecnologia basata su estensione di database Citus per PostgreSQL)
In questo esempio si useranno le tabelle distribuite di Azure Cosmos DB for PostgreSQL per archiviare ed eseguire query sugli eventi registrati dai collaboratori open source di GitHub.
Prerequisiti
Per seguire questa guida di avvio rapido, è prima necessario:
- Creare un cluster nel portale di Azure.
- Connettersi al cluster con psql per eseguire i comandi SQL.
Creare tabelle
Dopo la connessione tramite psql è possibile creare le tabelle. Copiare e incollare i comandi seguenti nella finestra del terminale psql e premere INVIO per l'esecuzione:
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);
Si noti l'indice GIN su payload
in github_events
. L'indice consente l'esecuzione rapida di query nella colonna JSONB. Poiché Citus è un'estensione di PostgreSQL, Azure Cosmos DB for PostgreSQL supporta funzionalità avanzate di PostgreSQL come il tipo di dati JSONB per l'archiviazione di dati semistrutturati.
Distribuire le tabelle
create_distributed_table()
è la funzione magica fornita da Azure Cosmos DB for PostgreSQL per distribuire le tabelle e usare le risorse tra più computer. La funzione scompone le tabelle in partizioni, che possono essere distribuite tra i nodi per migliorare le prestazioni di archiviazione e calcolo.
Nota
Nelle applicazioni reali, quando il carico di lavoro è adatto a 64 vCore, 256 GB di RAM e 2 TB di archiviazione, è possibile usare un cluster a nodo singolo. In questo caso, la distribuzione delle tabelle è facoltativa. In un secondo momento, è possibile distribuire le tabelle in base alle esigenze usando create_distributed_table_concurrently.
Verranno quindi distribuite le tabelle:
SELECT create_distributed_table('github_users', 'user_id');
SELECT create_distributed_table('github_events', 'user_id');
Importante
La distribuzione delle tabelle o l'uso del partizionamento orizzontale basato su schema sono necessari per sfruttare le funzionalità delle prestazioni di Azure Cosmos DB for PostgreSQL. Se non si distribuiscono le tabelle o gli schemi, i nodi di lavoro non possono eseguire query che coinvolgono i rispettivi dati.
Caricare dati in tabelle distribuite
È possibile compilare le tabelle con dati di esempio. Per questa guida di avvio rapido si userà un set di dati acquisito in precedenza dall'API GitHub.
Si userà l'estensione pg_azure_storage per caricare i dati direttamente da un contenitore pubblico in Archiviazione BLOB di Azure. Prima di tutto è necessario creare l'estensione nel database:
SELECT * FROM create_extension('azure_storage');
Eseguite i comandi seguenti per consentire al database di recuperare i file CSV di esempio e caricarli nelle tabelle di database.
-- 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';
Si noti che l'estensione ha riconosciuto che gli URL forniti al comando COPY provengono da Archiviazione BLOB di Azure e che i file a cui si è fatto riferimento sono stati compressi con Gzip e sono stati già gestiti automaticamente.
È possibile esaminare i dettagli delle tabelle distribuite, incluse le relative dimensioni, con la vista citus_tables
:
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)
Passaggi successivi
Ora le tabelle sono state distribuite e caricate con i dati. Provare quindi a eseguire query tra le tabelle distribuite.