Creación y distribución de tablas en Azure Cosmos DB for PostgreSQL
SE APLICA A: Azure Cosmos DB for PostgreSQL (con tecnología de la extensión de base de datos de Citus en PostgreSQL)
En este ejemplo, usaremos tablas distribuidas de Azure Cosmos DB for PostgreSQL para almacenar y consultar los eventos registrados de los colaboradores de código abierto de GitHub.
Requisitos previos
Para seguir este inicio rápido, primero tiene que:
- Cree un clúster en Azure Portal.
- Conéctese al clúster con psql para ejecutar comandos SQL.
Crear tablas.
Una vez que se haya conectado a través de psql vamos a crear nuestra tabla. Copie y pegue los siguientes comandos en la ventana del terminal psql y presione Entrar para ejecutar:
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);
Observe el índice GIN en payload
de github_events
. El índice permite realizar consultas rápidas en la columna JSONB. Dado que Citus es una extensión de PostgreSQL, Azure Cosmos DB for PostgreSQL admite características avanzadas de PostgreSQL como el tipo de datos JSONB para almacenar datos semiestructurados.
Distribución de tablas
create_distributed_table()
es la función magic que proporciona Azure Cosmos DB for PostgreSQL para distribuir tablas y usar recursos entre varias máquinas. La función descompone las tablas en particiones, que se pueden distribuir entre los nodos para aumentar el rendimiento de almacenamiento y proceso.
Nota
En aplicaciones reales, cuando la carga de trabajo se puede ejecutar en 64 núcleos virtuales, 256 GB de RAM y 2 TB de almacenamiento, puede usar un clúster de un solo nodo. En este caso, la distribución de tablas es opcional. Más adelante, podrá distribuir tablas según sea necesario con create_distributed_table_concurrently.
Vamos a distribuir las tablas:
SELECT create_distributed_table('github_users', 'user_id');
SELECT create_distributed_table('github_events', 'user_id');
Importante
La distribución de tablas o el uso de particionamiento basado en esquemas es necesario para aprovechar las características de rendimiento de Azure Cosmos DB for PostgreSQL. Si no distribuye tablas o esquemas, los nodos de trabajo no pueden ayudar a ejecutar las consultas que impliquen sus datos.
Carga de datos en tablas distribuidas
Estamos listos para rellenar las tablas con datos de muestra. Para esta guía de inicio rápido, usaremos un conjunto de datos capturado previamente desde la API de GitHub.
Vamos a usar la extensión pg_azure_storage para cargar los datos directamente desde un contenedor público en Azure Blob Storage. En primer lugar, es necesario crear la extensión en nuestra base de datos:
SELECT * FROM create_extension('azure_storage');
Ejecute los siguientes comandos para que la base de datos obtenga los archivos CSV de ejemplo y los cargue en las tablas de la base de datos.
-- 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';
Observe cómo la extensión reconoce que las direcciones URL proporcionadas al comando de copia son de Azure Blob Storage,que los archivos objetivo estaban comprimidos en gzip y que además controlamos eso automáticamente.
Podemos revisar los detalles de nuestras tablas distribuidas, incluidos sus tamaños, 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)
Pasos siguientes
Ahora tenemos tablas distribuidas y las hemos cargado con datos. A continuación, vamos a probar a ejecutar consultas en las tablas distribuidas.