Inicio rápido: Creación de una instancia de Azure Database for PostgreSQL Hiperescala (Citus) (versión preliminar) en Azure PortalQuickstart: Create an Azure Database for PostgreSQL - Hyperscale (Citus) (preview) in the Azure portal

Azure Database for PostgreSQL es un servicio administrado que usa para ejecutar, administrar y escalar bases de datos de PostgreSQL de alta disponibilidad en la nube.Azure Database for PostgreSQL is a managed service that you use to run, manage, and scale highly available PostgreSQL databases in the cloud. Este inicio rápido muestra cómo crear un servidor de Azure Database for PostgreSQL Hiperescala (Citus) (versión preliminar) utilizando Azure Portal.This Quickstart shows you how to create an Azure Database for PostgreSQL - Hyperscale (Citus) (preview) server group using the Azure portal. Explorará los datos distribuidos: tablas de particionamiento entre nodos, ingesta de datos de ejemplo y ejecución de consultas que se ejecutan en varios nodos.You'll explore distributed data: sharding tables across nodes, ingesting sample data, and running queries that execute on multiple nodes.

Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.If you don't have an Azure subscription, create a free account before you begin.

Inicio de sesión en Azure PortalSign in to the Azure portal

Inicie sesión en el Azure Portal.Sign in to the Azure portal.

Creación de una instancia de Azure Database for PostgreSQL: Hiperescala (Citus)Create an Azure Database for PostgreSQL - Hyperscale (Citus)

Para crear un servidor de Azure Database for PostgreSQL, siga estos pasos:Follow these steps to create an Azure Database for PostgreSQL server:

  1. Haga clic en Crear un recurso de la esquina superior izquierda de Azure Portal.Click Create a resource in the upper left-hand corner of the Azure portal.

  2. En la página Nuevo, seleccione Bases de datos y, en la página Bases de datos, seleccione Azure Database for PostgreSQL.Select Databases from the New page, and select Azure Database for PostgreSQL from the Databases page.

  3. Para la opción de implementación, haga clic en el botón Crear en Hyperscale (Citus) server group - PREVIEW (Grupo de servidores Hiperescala (Citus): VERSIÓN PRELIMINAR).For the deployment option, click the Create button under Hyperscale (Citus) server group - PREVIEW.

  4. Rellene el formulario del nuevo servidor con la siguiente información:Fill out the new server details form with the following information:

    • Grupo de recursos: haga clic en el vínculo Crear nuevo que está debajo de este cuadro de texto para este campo.Resource group: click the Create new link below the text box for this field. Escriba un nombre como myresourcegroup.Enter a name such as myresourcegroup.
    • Nombre del grupo de servidores: escriba un nombre exclusivo para el nuevo grupo de servidores, que también se usará para un subdominio de servidor.Server group name: enter a unique name for the new server group, which will also be used for a server subdomain.
    • Nombre de usuario de administrador: actualmente, se necesita el valor citus y no se puede cambiar.Admin username: currently required to be the value citus, and can't be changed.
    • Contraseña: tiene que tener al menos ocho caracteres de las tres categorías siguientes: letras mayúsculas del alfabeto inglés, letras minúsculas del alfabeto inglés, números (0-9) y caracteres no alfanuméricos (!, $, # o %, entre otros)Password: must be at least eight characters long and contain characters from three of the following categories – English uppercase letters, English lowercase letters, numbers (0-9), and non-alphanumeric characters (!, $, #, %, and so on.)
    • Ubicación: use la ubicación más cercana a los usuarios para que puedan acceder de la forma más rápida posible a los datos.Location: use the location that is closest to your users to give them the fastest access to the data.

    Importante

    Se precisa la contraseña de administrador del servidor que especifique aquí para iniciar sesión en el servidor y sus bases de datos.The server admin password that you specify here is required to log in to the server and its databases. Recuerde o grabe esta información para su uso posterior.Remember or record this information for later use.

  5. Haga clic en Configurar grupo de servidores.Click Configure server group. No modifique los valores de esa sección y haga clic en Guardar.Leave the settings in that section unchanged and click Save.

  6. Haga clic en Revisar y crear y luego en Crear para aprovisionar el servidor.Click Review + create and then Create to provision the server. El aprovisionamiento tarda unos minutos.Provisioning takes a few minutes.

  7. La página irá a la supervisión de la implementación.The page will redirect to monitor deployment. Cuando el estado activo cambia de La implementación está en curso a Se completó la implementación, haga clic en el elemento de menú Salidas que se encuentra a la izquierda de la página.When the live status changes from Your deployment is underway to Your deployment is complete, click the Outputs menu item on the left of the page.

  8. La página de resultados incluirá un nombre de host de coordinación junto a un botón para copiar el valor en el Portapapeles.The outputs page will contain a coordinator hostname with a button next to it to copy the value to the clipboard. Anote esta información para usarla más adelante.Record this information for later use.

Configuración de una regla de firewall de nivel de servidorConfigure a server-level firewall rule

El servicio Azure Database for PostgreSQL Hiperescala (Citus) (versión preliminar) usa un firewall en el nivel de servidor.The Azure Database for PostgreSQL – Hyperscale (Citus) (preview) service uses a firewall at the server-level. De manera predeterminada, el firewall impide que todas las herramientas y aplicaciones externas se conecten al nodo de coordinación y a cualquier base de datos interna.By default, the firewall prevents all external applications and tools from connecting to the coordinator node and any databases inside. Tenemos que agregar una regla para abrir el firewall en un intervalo específico de direcciones IP.We must add a rule to open the firewall for a specific IP address range.

  1. Desde la sección Salidas donde anteriormente copió el nombre de host del nodo de coordinación, haga clic en Atrás para volver al elemento de menú Información general.From the Outputs section where you previously copied the coordinator node hostname, click back into the Overview menu item.

  2. Busque el nombre del grupo de servidores de la implementación y haga clic en él.Find the name of your deployment's server group and click it. (El nombre del grupo de servidores no tendrá un sufijo.(The server group name will not have a suffix. Los elementos con nombres que terminan en, por ejemplo, "-c", "-w0" o "-w1" no son el grupo de servidores).Items with names ending in, for example, "-c", "-w0", or "-w1" are not the server group.)

  3. Haga clic en Firewall en Seguridad, en el menú de la izquierda.Click Firewall under Security in the left-hand menu.

  4. Haga clic en el vínculo + Agregar regla de firewall para la dirección IP del cliente actual.Click the link + Add firewall rule for current client IP address.

  5. Por último, haga clic en el botón Guardar.Finally, click the Save button.

    Nota

    El servidor Azure PostgreSQL se comunica a través de puerto 5432.Azure PostgreSQL server communicates over port 5432. Si intenta conectarse desde una red corporativa, es posible que el firewall de la red no permita el tráfico saliente a través del puerto 5432.If you are trying to connect from within a corporate network, outbound traffic over port 5432 may not be allowed by your network's firewall. En ese caso, no puede conectarse al servidor de Azure SQL Database, salvo que el departamento de TI abra el puerto 5432.If so, you cannot connect to your Azure SQL Database server unless your IT department opens port 5432.

Conexión a la base de datos mediante psqlConnect to the database using psql

Al crear el servidor de Azure Database for PostgreSQL, también se crea la base de datos predeterminada denominada citus.When you create your Azure Database for PostgreSQL server, a default database named citus is created. Para conectarse al servidor de bases de datos, necesita una cadena de conexión y la contraseña de administrador.To connect to your database server, you need a connection string and the admin password.

  1. Obtenga la cadena de conexión.Obtain the connection string. En la página del grupo de servidores, haga clic en el elemento de menú Cadenas de conexión.In the server group page click the Connection strings menu item. (Se encuentra en Configuración). Busque la cadena marcada como C++ (libpq) .(It's under Settings.) Find the string marked C++ (libpq). Tendrá el formato:It will be of the form:

    host=hostname.postgres.database.azure.com port=5432 dbname=citus user=citus password={your_password} sslmode=require
    

    Copie la cadena.Copy the string. Deberá reemplazar "{su_contraseña}" por la contraseña administrativa que eligió anteriormente.You will need to replace "{your_password}" with the administrative password you chose earlier. El sistema no almacena la contraseña de texto no cifrado y, por lo tanto, no puede mostrarla en la cadena de conexión.The system doesn't store your plaintext password and so can't display it for you in the connection string.

  2. Abra una ventana del terminal en el equipo local.Open a terminal window on your local computer.

  3. En el símbolo de sistema, conéctese al servidor de Azure Database for PostgreSQL con la utilidad psql.At the prompt, connect to your Azure Database for PostgreSQL server with the psql utility. Pase la cadena de conexión entre comillas, asegurándose de que contiene la contraseña:Pass your connection string in quotes, being sure it contains your password:

    psql "{connection_string}"
    

    Por ejemplo, el siguiente comando se conecta al nodo de coordinación del grupo de servidores mydemoserver:For example, the following command connects to the coordinator node of the server group mydemoserver:

    psql "host=mydemoserver-c.postgres.database.azure.com port=5432 dbname=citus user=citus password={your_password} sslmode=require"
    

Creación y distribución de tablasCreate and distribute tables

Una vez conectado al nodo coordinador de hiperescala mediante psql, puede completar algunas tareas básicas.Once connected to the hyperscale coordinator node using psql, you can complete some basic tasks.

Dentro de los servidores Hiperescala hay tres tipos de tablas:Within Hyperscale servers there are three types of tables:

  • Tablas particionadas o distribuidas (repartidas para ayudar a escalar para el rendimiento y paralelización)Distributed or sharded tables (spread out to help scaling for performance and parallelization)
  • Tablas de referencia (se mantienen varias copias)Reference tables (multiple copies maintained)
  • Tablas locales (se usan frecuentemente para las tablas de administración interna)Local tables (often used for internal admin tables)

En este inicio rápido nos centraremos principalmente en las tablas distribuidas para familiarizarnos con ellas.In this quickstart, we'll primarily focus on distributed tables and getting familiar with them.

El modelo de datos con el que vamos a trabajar es simple: datos de usuario y eventos desde GitHub.The data model we're going to work with is simple: user and event data from GitHub. Los eventos incluyen la creación de una bifurcación, confirmaciones git relacionadas con una organización y más.Events include fork creation, git commits related to an organization, and more.

Una vez que se haya conectado a través de psql vamos a crear nuestras tablas.Once you've connected via psql, let's create our tables. En la consola de psql ejecute lo siguiente:In the psql console run:

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 TABLE github_users
(
    user_id bigint,
    url text,
    login text,
    avatar_url text,
    gravatar_id text,
    display_login text
);

El campo payload de github_events tiene un tipo de datos JSONB.The payload field of github_events has a JSONB datatype. JSONB es el tipo de datos JSON en formato binario en Postgres.JSONB is the JSON datatype in binary form in Postgres. Este tipo de datos facilita el almacenamiento de un esquema flexible en una sola columna.The datatype makes it easy to store a flexible schema in a single column.

Postgres puede crear un índice GIN en este tipo que indexará cada clave y valor dentro de él.Postgres can create a GIN index on this type, which will index every key and value within it. Con un índice, consultar la carga con varias condiciones pasa a ser una tarea rápida y fácil.With an index, it becomes fast and easy to query the payload with various conditions. Sigamos adelante, ahora vamos a crear un par de índices antes de cargar los datos.Let's go ahead and create a couple of indexes before we load our data. En psql:In psql:

CREATE INDEX event_type_index ON github_events (event_type);
CREATE INDEX payload_index ON github_events USING GIN (payload jsonb_path_ops);

A continuación con esas tablas Postgres en el nodo de coordinación, indicaremos a Hiperescala que las particione entre los roles de trabajo.Next we’ll take those Postgres tables on the coordinator node and tell Hyperscale to shard them across the workers. Para ello, ejecutaremos una consulta para cada tabla especificando la clave en la que se va a particionar.To do so, we’ll run a query for each table specifying the key to shard it on. En el ejemplo actual, vamos a particionar la tabla de usuarios y de eventos en user_id:In the current example we’ll shard both the events and users table on user_id:

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

Ya estamos preparados para cargar los datos.We're ready to load data. En psql todavía, aplique un shell para descargar los archivos:In psql still, shell out to download the files:

\! curl -O https://examples.citusdata.com/users.csv
\! curl -O https://examples.citusdata.com/events.csv

A continuación, cargue los datos de los archivos en las tablas distribuidas:Next, load the data from the files into the distributed tables:

\copy github_events from 'events.csv' WITH CSV
\copy github_users from 'users.csv' WITH CSV

Ejecutar consultasRun queries

Ahora llega la parte más divertida: vamos a ejecutar algunas consultas.Now it's time for the fun part, actually running some queries. Comencemos con un sencillo count (*) para ver cuántos datos hemos cargado:Let's start with a simple count (*) to see how much data we loaded:

SELECT count(*) from github_events;

Esto ha ido muy bien.That worked nicely. Volveremos a ese tipo de agregación más tarde, pero ahora vamos a echar un vistazo a otras consultas.We'll come back to that sort of aggregation in a bit, but for now let’s look at a few other queries. Dentro de la columna payload de JSONB existe una cantidad importante de datos, pero varían en función del tipo de evento.Within the JSONB payload column there's a good bit of data, but it varies based on event type. Los eventos PushEvent contienen un tamaño que incluye el número de diferentes confirmaciones para la inserción.PushEvent events contain a size that includes the number of distinct commits for the push. Se puede usar para buscar el número total de confirmaciones por hora:We can use it to find the total number of commits per hour:

SELECT date_trunc('hour', created_at) AS hour,
       sum((payload->>'distinct_size')::int) AS num_commits
FROM github_events
WHERE event_type = 'PushEvent'
GROUP BY hour
ORDER BY hour;

Hasta ahora, las consultas que hemos realizado solo han utilizado github_events, pero podemos combinar esta información con github_users.So far the queries have involved the github_events exclusively, but we can combine this information with github_users. Como hemos particionado tanto los usuarios como los eventos en el mismo identificador (user_id), las filas de ambas tablas con identificadores de usuario que coincidan se coubicarán en los mismos nodos de base de datos con lo que pueden combinarse fácilmente.Since we sharded both users and events on the same identifier (user_id), the rows of both tables with matching user IDs will be colocated on the same database nodes and can easily be joined.

Si incorporamos user_id, Hiperescala puede insertar la ejecución conjunta en particiones para su ejecución en paralelo en nodos de trabajo.If we join on user_id, Hyperscale can push the join execution down into shards for execution in parallel on worker nodes. Por ejemplo, vamos a buscar los usuarios que hayan creado el mayor número de repositorios:For example, let's find the users who created the greatest number of repositories:

SELECT gu.login, count(*)
  FROM github_events ge
  JOIN github_users gu
    ON ge.user_id = gu.user_id
 WHERE ge.event_type = 'CreateEvent'
   AND ge.payload @> '{"ref_type": "repository"}'
 GROUP BY gu.login
 ORDER BY count(*) DESC;

Limpieza de recursosClean up resources

En los pasos anteriores, creó recursos de Azure en un grupo de servidores.In the preceding steps, you created Azure resources in a server group. Si no cree que vaya a necesitar estos recursos en el futuro, elimine el grupo de servidores.If you don't expect to need these resources in the future, delete the server group. Presione el botón Eliminar en la página Información general del grupo de servidores.Press the Delete button in the Overview page for your server group. Cuando aparezca una página emergente en la que se le pida hacerlo, confirme el nombre del grupo de servidores y haga clic en el botón Eliminar final.When prompted on a pop-up page, confirm the name of the server group and click the final Delete button.

Pasos siguientesNext steps

En este inicio rápido, aprendió a aprovisionar un grupo de servidores de Hiperescala (Citus).In this quickstart, you learned how to provision a Hyperscale (Citus) server group. Se conectó a él con psql, creó un esquema y distribuyó datos.You connected to it with psql, created a schema, and distributed data.

A continuación, siga un tutorial para crear aplicaciones escalables de multiinquilino.Next, follow a tutorial to build scalable multi-tenant applications.