Guida introduttiva: Creare un database di Azure per PostgreSQL - Hyperscale (Citus) nel portale di AzureQuickstart: Create an Azure Database for PostgreSQL - Hyperscale (Citus) in the Azure portal

Il database di Azure per PostgreSQL è un servizio gestito usato per eseguire, gestire e ridimensionare database PostgreSQL a disponibilità elevata nel cloud.Azure Database for PostgreSQL is a managed service that you use to run, manage, and scale highly available PostgreSQL databases in the cloud. Questo argomento di avvio rapido illustra come creare un gruppo di server Database di Azure per PostgreSQL - Hyperscale (Citus) con il portale di Azure.This Quickstart shows you how to create an Azure Database for PostgreSQL - Hyperscale (Citus) server group using the Azure portal. Verranno esplorati i dati distribuiti: le tabelle di partizionamento orizzontale tra i nodi, l'inserimento di dati di esempio e l'esecuzione di query su più nodi.You'll explore distributed data: sharding tables across nodes, ingesting sample data, and running queries that execute on multiple nodes.

Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.If you don't have an Azure subscription, create a free account before you begin.

Accedere al portale di AzureSign in to the Azure portal

Accedere al portale di Azure.Sign in to the Azure portal.

Creare un Database di Azure per PostgreSQL - Hyperscale (Citus)Create an Azure Database for PostgreSQL - Hyperscale (Citus)

Seguire questa procedura per creare un database di Azure per il server PostgreSQL:Follow these steps to create an Azure Database for PostgreSQL server:

  1. Fare clic su Crea una risorsa nell'angolo superiore sinistro del portale di Azure.Click Create a resource in the upper left-hand corner of the Azure portal.

  2. Selezionare Database nella pagina Nuovo e selezionare Database di Azure per PostgreSQL nella pagina Database.Select Databases from the New page, and select Azure Database for PostgreSQL from the Databases page.

  3. Per l'opzione di distribuzione, fare clic sul pulsante Crea in Gruppo di server Hyperscale (Citus) .For the deployment option, click the Create button under Hyperscale (Citus) server group.

  4. Compilare il modulo dei dettagli del nuovo server con le informazioni seguenti:Fill out the new server details form with the following information:

    • Gruppo di risorse: fare clic sul collegamento Crea nuovo sotto la casella di testo di questo campo.Resource group: click the Create new link below the text box for this field. Immettere un nome, ad esempio myresourcegroup.Enter a name such as myresourcegroup.
    • Nome gruppo server: immettere un nome univoco per il nuovo gruppo di server, che verrà usato anche per un sottodominio di server.Server group name: enter a unique name for the new server group, which will also be used for a server subdomain.
    • Nome utente amministratore: attualmente deve essere il valore citus e non può essere modificato.Admin username: currently required to be the value citus, and can't be changed.
    • Password: deve essere composta da almeno otto caratteri e deve contenere caratteri appartenenti a tre delle categorie seguenti: lettere maiuscole, lettere minuscole, numeri (0-9) e caratteri non alfanumerici (!, $, #, % e così via).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.)
    • Località: usare la località più vicina agli utenti per consentire loro l'accesso più rapido ai dati.Location: use the location that is closest to your users to give them the fastest access to the data.

    Importante

    La password dell'amministratore del server qui specificata è necessaria per accedere al server e ai relativi database.The server admin password that you specify here is required to log in to the server and its databases. Prendere nota di queste informazioni per usarle in seguito.Remember or record this information for later use.

  5. Fare clic su Configura gruppo di server.Click Configure server group. Lasciare invariate le impostazioni di tale sezione e fare clic su Salva.Leave the settings in that section unchanged and click Save.

  6. Fare clic su Avanti: Rete > nella parte inferiore della schermata.Click Next : Networking > at the bottom of the screen.

  7. Nella scheda Rete fare clic sul pulsante di opzione Endpoint pubblico.In the Networking tab, click the Public endpoint radio button. Endpoint pubblico selezionatoPublic endpoint selected

  8. Fare clic sul collegamento + Aggiungere l'indirizzo IP client corrente.Click the link + Add current client IP address. IP client aggiuntoAdded client IP

    Nota

    Il server PostgreSQL Azure comunica sulla porta 5432.Azure PostgreSQL server communicates over port 5432. Se si sta cercando di connettersi da una rete aziendale, il traffico in uscita sulla porta 5432 potrebbe non essere consentito dal firewall della rete.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. In questo caso, non è possibile connettersi al cluster Hyperscale (Citus), a meno che il reparto IT non apra la porta 5432.If so, you cannot connect to your Hyperscale (Citus) cluster unless your IT department opens port 5432.

  9. Fare clic su Rivedi e crea e quindi su Crea per effettuare il provisioning del server.Click Review + create and then Create to provision the server. Il provisioning richiede alcuni minuti.Provisioning takes a few minutes.

  10. La pagina verrà reindirizzata per monitorare la distribuzione.The page will redirect to monitor deployment. Quando lo stato attivo passa da La distribuzione è in corso a La distribuzione è stata completata, fare clic sulla voce di menu Output nella parte sinistra della pagina.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.

  11. La pagina degli output conterrà un nome host di coordinatore con accanto un pulsante per copiare il valore negli Appunti.The outputs page will contain a coordinator hostname with a button next to it to copy the value to the clipboard. Prendere nota di queste informazioni per un uso successivo.Record this information for later use.

Connettersi al database usando psqlConnect to the database using psql

Quando si crea il server di Database di Azure per PostgreSQL, viene creato un database predefinito denominato citus.When you create your Azure Database for PostgreSQL server, a default database named citus is created. Per connettersi al server di database, è necessaria una stringa di connessione e la password amministratore.To connect to your database server, you need a connection string and the admin password.

  1. Ottenere la stringa di connessione.Obtain the connection string. Nella pagina del gruppo di server fare clic sulla voce di menu Stringhe di connessione.In the server group page click the Connection strings menu item. Si trova in Impostazioni. Trovare la stringa contrassegnata con psql.(It's under Settings.) Find the string marked psql. Sarà nel formato:It will be of the form:

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

    Copiare la stringa.Copy the string. È necessario sostituire "{your_password}" con la password amministrativa scelta in precedenza.You will need to replace "{your_password}" with the administrative password you chose earlier. Il sistema archivia la password in testo crittografato. Non è quindi possibile visualizzarla nella stringa di connessione.The system doesn't store your plaintext password and so can't display it for you in the connection string.

  2. Aprire una finestra del terminale nel computer locale.Open a terminal window on your local computer.

  3. Quando richiesto, connettersi al server di Database di Azure per PostgreSQL usando l'utilità psql.At the prompt, connect to your Azure Database for PostgreSQL server with the psql utility. Passare la stringa di connessione tra virgolette, accertandosi che contenga la password:Pass your connection string in quotes, being sure it contains your password:

    psql "host=..."
    

    Il comando seguente, ad esempio, si connette al nodo coordinatore del gruppo di server 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"
    

Creare e distribuire le tabelleCreate and distribute tables

Dopo la connessione al nodo coordinatore Hyperscale tramite psql, è possibile completare alcune attività di base.Once connected to the hyperscale coordinator node using psql, you can complete some basic tasks.

All'interno dei server Hyperscale esistono tre tipi di tabelle:Within Hyperscale servers there are three types of tables:

  • Tabelle distribuite o partizionate (ripartite per agevolare il ridimensionamento a favore delle prestazioni e della parallelizzazione)Distributed or sharded tables (spread out to help scaling for performance and parallelization)
  • Tabelle di riferimento (vengono mantenute più copie)Reference tables (multiple copies maintained)
  • Tabelle locali (spesso usate per le tabelle di amministrazione interna)Local tables (often used for internal admin tables)

Questo argomento di avvio rapido si concentra in particolar modo sulle tabelle distribuite e su come imparare a usarle.In this quickstart, we'll primarily focus on distributed tables and getting familiar with them.

Il modello di dati che verrà usato è semplice: dati utente e dati sugli eventi provenienti da GitHub.The data model we're going to work with is simple: user and event data from GitHub. Gli eventi includono la creazione di fork, commit GIT correlati a un'organizzazione e molto altro.Events include fork creation, git commits related to an organization, and more.

Dopo la connessione tramite psql è possibile creare le tabelle.Once you've connected via psql, let's create our tables. Nella console di psql eseguire: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
);

Il campo payload di github_events presenta un tipo di dati JSONB.The payload field of github_events has a JSONB datatype. JSONB è il tipo di dati JSON in formato binario in Postgres.JSONB is the JSON datatype in binary form in Postgres. Il tipo di dati semplifica l'archiviazione di uno schema flessibile in una singola colonna.The datatype makes it easy to store a flexible schema in a single column.

Postgres può creare un indice GIN su questo tipo, che indicizzerà tutte le chiavi e i valori in esse contenuti.Postgres can create a GIN index on this type, which will index every key and value within it. Grazie all'indice, l'esecuzione di query del payload in varie condizioni diventa un'operazione semplice e veloce.With an index, it becomes fast and easy to query the payload with various conditions. È possibile procedere alla creazione di un paio di indici prima di caricare i dati.Let's go ahead and create a couple of indexes before we load our data. In 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);

Successivamente queste tabelle Postgres verranno spostate nel nodo coordinatore e verrà indicato a Hyperscale di partizionarle tra i ruoli di lavoro.Next we’ll take those Postgres tables on the coordinator node and tell Hyperscale to shard them across the workers. A tale scopo, verrà eseguita una query per ogni tabella specificando la chiave in cui verrà eseguita la partizione.To do so, we’ll run a query for each table specifying the key to shard it on. Nell'esempio corrente verrà eseguita la partizione sia della tabella degli eventi che della tabella degli utenti in 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');

A questo punto, è possibile caricare i dati.We're ready to load data. Ancora in psql passare alla shell per scaricare i file: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

Caricare quindi i dati dai file nelle tabelle distribuite:Next, load the data from the files into the distributed tables:

SET CLIENT_ENCODING TO 'utf8';

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

Eseguire le queryRun queries

È arrivato il momento di eseguire qualche query.Now it's time for the fun part, actually running some queries. Iniziamo semplicemente con count (*) per sapere quanti dati sono stati caricati:Let's start with a simple count (*) to see how much data we loaded:

SELECT count(*) from github_events;

Ha funzionato.That worked nicely. A breve torneremo su questo tipo di aggregazione, ma per adesso esaminiamo qualche altra query.We'll come back to that sort of aggregation in a bit, but for now let’s look at a few other queries. Nella colonna payload JSONB sono contenuti numerosi dati, che però variano in base al tipo di evento.Within the JSONB payload column there's a good bit of data, but it varies based on event type. Gli eventi PushEvent contengono una dimensione che include il numero dei diversi commit per il push.PushEvent events contain a size that includes the number of distinct commits for the push. È possibile usarlo per individuare il totale di commit orari: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;

Finora le query hanno riguardato esclusivamente github_events, ma è possibile combinare queste informazioni con github_users.So far the queries have involved the github_events exclusively, but we can combine this information with github_users. Dal momento che sia gli utenti che gli eventi sono stati partizionati con lo stesso identificatore (user_id), le righe di entrambe le tabelle con ID utente corrispondenti avranno un percorso condiviso negli stessi nodi del database e potranno facilmente essere sottoposte a join.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.

Se si crea un join su user_id, Hyperscale può eseguire il push dell'esecuzione del join nelle partizioni in modo che l'esecuzione avvenga in parallelo nei nodi di lavoro.If we join on user_id, Hyperscale can push the join execution down into shards for execution in parallel on worker nodes. È ad esempio possibile trovare gli utenti che hanno creato il maggior numero di repository: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;

Pulire le risorseClean up resources

Nei passaggi precedenti sono state create risorse di Azure in un gruppo di server.In the preceding steps, you created Azure resources in a server group. Se non si prevede di avere bisogno di queste risorse in futuro, eliminare il gruppo di server.If you don't expect to need these resources in the future, delete the server group. Fare clic sul pulsante Elimina nella pagina Panoramica per il gruppo di server.Press the Delete button in the Overview page for your server group. Quando viene visualizzata la richiesta in una pagina popup, verificare il nome del gruppo di server e fare clic sul pulsante Elimina in basso.When prompted on a pop-up page, confirm the name of the server group and click the final Delete button.

Passaggi successiviNext steps

In questo argomento di avvio rapido è stato illustrato come effettuare il provisioning di un gruppo di server Hyperscale (Citus).In this quickstart, you learned how to provision a Hyperscale (Citus) server group. È stata stabilita la connessione al gruppo con psql, è stato creato uno schema e sono stati distribuiti i dati.You connected to it with psql, created a schema, and distributed data.

Come passaggio successivo, seguire un'esercitazione su come compilare applicazioni multi-tenant scalabili.Next, follow a tutorial to build scalable multi-tenant applications.