Gestire lo schema in un'applicazione SaaS che usa più database multi-tenant

Si applica a:database SQL di Azure

Questa esercitazione esamina le problematiche correlate alla gestione di un insieme di database in un'applicazione SaaS (software come un servizio). Vengono illustrate soluzioni per il fan-out delle modifiche allo schema nell'insieme di database.

Come qualsiasi altra applicazione, l'app SaaS Wingtip Tickets evolverà nel tempo e saranno necessarie modifiche al database. Le modifiche possono influire sui dati di schemi o di riferimento o applicare attività di manutenzione database. Con un'applicazione SaaS che usa un modello di un database per ogni tenant, le modifiche devono essere coordinate in un insieme potenzialmente grande di database tenant. Inoltre, è necessario incorporare queste modifiche nel processo di provisioning del database per assicurare che siano incluse nei nuovi database al momento della creazione.

Due scenari

Questa esercitazione illustra i due scenari seguenti:

  • Distribuire gli aggiornamenti dei dati di riferimento per tutti i tenant.
  • Ricompilare un indice nella tabella contenente i dati di riferimento.

La funzionalità Processi elastici del database SQL di Azure viene usata per eseguire queste operazioni tra i database tenant. I processi funzionano anche sul database tenant "modello". Nell'app di esempio Wingtip Tickets il database modello viene copiato per effettuare il provisioning di un nuovo database tenant.

In questa esercitazione si apprenderà come:

  • Creare un agente processo.
  • Eseguire una query T-SQL su più database tenant.
  • Aggiornare i dati di riferimento in tutti i database tenant.
  • Creare un indice su una tabella in tutti i database tenant.

Prerequisiti

Nota

Questa esercitazione usa funzionalità del servizio database SQL di Azure incluse in un'anteprima limitata (processi di database elastico). Per eseguire questa esercitazione, fornire l'ID della sottoscrizione a SaaSFeedback@microsoft.com indicando nell'oggetto del messaggio Elastic Jobs Preview. Dopo aver ricevuto conferma che la sottoscrizione è stata abilitata, scaricare e installare i cmdlet più recenti della versione preliminare. Questa versione di anteprima è limitata. Per eventuali domande o richieste di supporto, contattare SaaSFeedback@microsoft.com.

Introduzione ai modelli di gestione dello schema SaaS

Il modello di database multi-tenant partizionato usato in questo esempio consente a un database tenant di contenere uno o più tenant. Questo esempio illustra la possibilità di usare una combinazione di database per più tenant e a tenant singolo, che abilita un modello ibrido di gestione del tenant. La gestione delle modifiche a questi database può essere complessa. Il servizio Processi elastici facilita l'amministrazione e la gestione di un numero elevato di database. I processi consentono di eseguire script Transact-SQL in modo sicuro e affidabile come attività, rispetto a un gruppo di database tenant. Le attività sono indipendenti dall'interazione o dall'input dell'utente. Questo metodo può essere usato per distribuire modifiche dello schema e dei dati di riferimento comuni a tutti i tenant in un'applicazione. Il servizio Processi elastici possono essere usati anche per conservare una copia del modello finale del database. Il modello viene usato per creare nuovi tenant, assicurando che siano sempre in uso lo schema e i dati di riferimento più recenti.

screen

Anteprima limitata del servizio Processi elastici

È disponibile una nuova versione del servizio Processi elastici che è ora una funzionalità integrata di database SQL di Azure. Questa nuova versione del servizio Processi elastici è attualmente in anteprima limitata. L'anteprima limitata supporta attualmente l'utilizzo di PowerShell per creare un agente processo e T-SQL per creare e gestire i processi.

Nota

Questa esercitazione usa funzionalità del servizio database SQL incluse in un'anteprima limitata (processi di database elastico). Per eseguire questa esercitazione, fornire l'ID della sottoscrizione a SaaSFeedback@microsoft.com indicando nell'oggetto del messaggio Elastic Jobs Preview. Dopo aver ricevuto conferma che la sottoscrizione è stata abilitata, scaricare e installare i cmdlet più recenti della versione preliminare. Questa versione di anteprima è limitata. Per eventuali domande o richieste di supporto, contattare SaaSFeedback@microsoft.com.

Ottenere gli script e il codice sorgente dell'applicazione SaaS di database multi-tenant Wingtip Tickets

Gli script del database multi-tenant SaaS Wingtip Tickets e un codice sorgente dell'applicazione sono disponibili nel repository WingtipTicketsSaaS-MultiTenantDB su GitHub. Vedere le linee guida generali per i passaggi da seguire per scaricare e sbloccare gli script dell'app SaaS Wingtip Tickets.

Creare un database dell'agente processo e un nuovo agente processo

Per questa esercitazione è necessario usare PowerShell per creare il database di agenti processo e l'agente processo. Come il database msdb usato da SQL Agent, l'agente di processo usa un database nel database SQL di Azure per archiviare le definizioni dei processi, lo stato dei processi e la cronologia. Dopo aver creato l'agente processo, è possibile creare e monitorare i processi immediatamente.

  1. In PowerShell ISE, apri ...\Learning Modules\Schema Management\Demo-SchemaManagement.ps1.
  2. Premere F5 per eseguire lo script.

Lo script Demo-SchemaManagement.ps1 chiama lo script Deploy-SchemaManagement.ps1 per creare un database denominato jobagent nel server di catalogo. Lo script crea quindi l'agente di processo, passando il database jobagent come parametro.

Creare un processo per distribuire nuovi dati di riferimento a tutti i tenant

Preparazione

Ogni database del tenant include un set di tipi di sedi nella tabella VenueTypes. Ogni tipo di sede definisce il tipo di eventi ospitati in una sede. Questi tipi di sedi corrispondono alle immagini di sfondo visualizzate nell'app degli eventi del tenant. Questo esercizio illustra come distribuire un aggiornamento a tutti i database per aggiungere due tipi di eventi aggiuntivi: Motorcycle Racing (Gare motociclistiche) e Swimming Club (Club nuoto).

Esaminare prima i tipi di sede inclusi in ogni database tenant. Connettiti a uno dei database tenant in SQL Server Management Studio (SSMS) ed esamina la tabella VenueTypes. È anche possibile eseguire query su questa tabella nell'editor di query nel portale di Azure, accessibile dalla pagina di database.

  1. Apri SSMS e connettiti al server tenants: tenants1-dpt-<user>.database.windows.net.
  2. Per verificare che Motorcycle Racing e Swimming Clubnon siano attualmente inclusi, esplora il database contosoconcerthall nel server tenants1-dpt-<user> ed esegui una query sulla tabella VenueTypes.

Passaggi

L'esercizio prevede ora la creazione di un processo per aggiornare la tabella VenueTypes in ogni database tenant, aggiungendo i due nuovi tipi di eventi.

Per creare un nuovo processo, usa l'insieme di stored procedure di sistema dei processi create nel database jobagent. Le stored procedure sono state create quando è stato creato l'agente processo.

  1. In SSMS, connettiti al server tenants: tenants1-mt-<user>.database.windows.net.

  2. Esplora il database tenants1.

  3. Esegui una query nella tabella VenueTypes per verificare che né Motorcycle RacingSwimming Club siano ancora nell'elenco risultati.

  4. Connettiti al server di catalogo, ovvero catalog-mt-<user>.database.windows.net.

  5. Connettiti al database jobagent nel server di catalogo.

  6. In SSMS, apri il file ...\Learning Modules\Schema Management\DeployReferenceData.sql.

  7. Modifica l'istruzione: set @User = <user> e sostituisci il valore Utente usato per l'implementazione dell'applicazione del database multi-tenant SaaS Wingtip Tickets.

  8. Premere F5 per eseguire lo script.

Osservazione

Osservare gli elementi seguenti nello script DeployReferenceData.sql:

  • sp_add_target_group crea il nome del gruppo di destinazione DemoServerGroup e aggiunge i membri di destinazione al gruppo.

  • sp_add_target_group_member aggiunge gli articoli seguenti:

    • Un tipo di membro di destinazione del server.
      • Si tratta del server tenants1-mt-<user> che contiene i database tenant.
      • Includere il server include i database tenant esistenti in fase di esecuzione del processo.
    • Un tipo di membro di destinazione del database per il database modello (basetenantdb) presente nel server catalog-mt-<user>,
    • Un tipo di membro di destinazione del database per includere il database adhocreporting usato in un'esercitazione successiva.
  • sp_add_job crea un processo denominato Distribuzione dati di riferimento.

  • sp_add_jobstep crea il passaggio del lavoro contenente il testo del comando T-SQL per aggiornare la tabella di riferimento, VenueTypes.

  • Le restanti viste nello script consentono di confermare l'esistenza degli oggetti e gestire il monitoraggio dell'esecuzione del processo. Usare queste query per esaminare il valore di stato nella colonna lifecycle per determinare quando il processo è stato completato. Il processo aggiorna il database tenant e aggiorna i due database aggiuntivi che contengono la tabella di riferimento.

In SSMS, esplora il database tenant nel server tenants1-mt-<user>. Esegui una query nella tabella VenueTypes per verificare che Motorcycle Racing e Swimming Clubsiano ora aggiunti alla tabella. Il conteggio totale dei tipi di eventi deve essere aumentato di due.

Creare un processo per gestire l'indice della tabella di riferimento

In questo esercizio viene creato un processo per ricompilare l'indice sulla chiave primaria della tabella di riferimento su tutti i database tenant. La ricompilazione di un indice è una tipica operazione di gestione del database che può essere eseguita da un amministratore dopo un carico di dati di grandi dimensioni, per migliorare le prestazioni.

  1. In SSMS, connettiti al database jobagent nel server catalog-mt-<user>.database.windows.net.

  2. In SSMS, apri il file ...\Learning Modules\Schema Management\OnlineReindex.sql.

  3. Premere F5 per eseguire lo script.

Osservazione

Nello script OnlineReindex.sql osservare gli elementi seguenti:

  • sp_add_job crea un nuovo lavoro denominato Online Reindex PK__VenueTyp__265E44FD7FD4C885.

  • sp_add_jobstep crea il passaggio del lavoro contenente il testo del comando T-SQL per aggiornare l'indice.

  • Le viste rimaste nello script monitorano l'esecuzione del processo. Usa queste query per esaminare il valore di stato nella colonna lifecycle per determinare quando il lavoro viene completato su tutti i membri del gruppo di destinazione.

Risorse aggiuntive

Passaggi successivi

In questa esercitazione si è appreso come:

  • Creare un agente processo per eseguire i processi T-SQL in più database
  • Aggiornare i dati di riferimento in tutti i database tenant
  • Creare un indice su una tabella in tutti i database tenant

Provare quindi a eseguire l'esercitazione sul reporting ad hoc per esaminare l'esecuzione di query distribuite tra database tenant.