Iniziare a utilizzare Spanner tramite REST

Obiettivi

Questo tutorial ti guida nei seguenti passaggi utilizzando l'API Cloud Spanner con REST:

  • Crea un'istanza e un database Spanner.
  • Scrivi, leggi ed esegui query SQL sui dati nel database.
  • Aggiorna lo schema del database.
  • Aggiungi un indice secondario al database.
  • Utilizza l'indice per leggere ed eseguire query SQL sui dati.
  • Recupera i dati utilizzando una transazione di sola lettura.

Se vuoi utilizzare le librerie client di Spanner anziché l'API REST, consulta Tutorial.

Costi

Questo tutorial utilizza Spanner, che è un componente fatturabile di Google Cloud. Per informazioni sul costo dell'utilizzo di Spanner, consulta Prezzi.

Prima di iniziare

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. Modi per effettuare chiamate REST

    Puoi effettuare chiamate REST Spanner utilizzando:

    Convenzioni utilizzate in questa pagina

    • Gli esempi utilizzano <var>PROJECT_ID</var> come ID progetto Google Cloud . Sostituisci <var>PROJECT_ID</var> con l'ID progetto Google Cloud .

    • Gli esempi creano e utilizzano un ID istanza test-instance. Sostituisci il tuo ID istanza se non utilizzi test-instance.

    • Gli esempi creano e utilizzano un ID database example-db. Sostituisci l'ID del tuo database se non utilizzi example-db.

    • Gli esempi utilizzano <var>SESSION</var> come parte del nome di una sessione. Sostituisci il valore che ricevi quando crei una sessione per <var>SESSION</var>.

    • Gli esempi utilizzano un ID transazione <var>TRANSACTION_ID</var>. Sostituisci il valore che ricevi quando crei una transazione per <var>TRANSACTION_ID</var>.

    • La funzionalità Prova supporta l'aggiunta interattiva di singoli campi di richiesta HTTP. La maggior parte degli esempi in questo documento fornisce l'intera richiesta anziché descrivere come aggiungere in modo interattivo singoli campi alla richiesta.

    Istanze

    Quando utilizzi Spanner per la prima volta, crea un'istanza. Un'istanza alloca le risorse utilizzate dai database Spanner. Quando crei un'istanza, scegli dove archiviare i dati e quanta capacità di calcolo deve avere l'istanza.

    Elencare le configurazioni delle istanze

    Quando crei un'istanza, specifichi una configurazione dell'istanza, che definisce il posizionamento geografico e la replica dei database in quell'istanza. Scegli una configurazione regionale per archiviare i dati in una regione o una configurazione multiregionale per distribuire i dati in più regioni. Scopri di più in Istanze.

    Utilizza projects.instanceConfigs.list per determinare quali configurazioni sono disponibili per il tuo progetto Google Cloud .

    1. Fai clic su projects.instanceConfigs.list.
    2. In genitore, inserisci:

      projects/PROJECT_ID

    3. Fai clic su Esegui. La risposta mostra le configurazioni di istanza disponibili. Ecco un esempio di risposta (la configurazione delle istanze del tuo progetto potrebbe essere diversa):

      { "instanceConfigs": [ { "name":
      "projects/<var>PROJECT_ID</var>/instanceConfigs/regional-asia-south1", "displayName":
      "asia-south1" }, { "name":
      "projects/<var>PROJECT_ID</var>/instanceConfigs/regional-asia-east1", "displayName":
      "asia-east1" }, { "name":
      "projects/<var>PROJECT_ID</var>/instanceConfigs/regional-asia-northeast1",
      "displayName": "asia-northeast1" }, { "name":
      "projects/<var>PROJECT_ID</var>/instanceConfigs/regional-europe-west1",
      "displayName": "europe-west1" }, { "name":
      "projects/<var>PROJECT_ID</var>/instanceConfigs/regional-us-east4", "displayName":
      "us-east4" }, { "name":
      "projects/<var>PROJECT_ID</var>/instanceConfigs/regional-us-central1", "displayName":
      "us-central1" } ] }
      

    Utilizzi il valore name per una delle configurazioni dell'istanza quando crei l'istanza.

    Crea un'istanza

    1. Fai clic su projects.instances.create.
    2. In genitore, inserisci:

      projects/<var>PROJECT_ID</var>
      
    3. Fai clic su Aggiungi parametri del corpo della richiesta e seleziona instance.

    4. Fai clic sulla bolla del suggerimento per istanza per visualizzare i campi possibili. Aggiungi valori per i seguenti campi:

      • nodeCount: inserisci 1.
      • config: inserisci il valore name di una delle configurazioni di istanza regionale restituite quando elenco delle configurazioni di istanza.
      • displayName: inserisci Test Instance.
    5. Fai clic sulla bolla del suggerimento che segue la parentesi chiusa per instance e seleziona instanceId.

    6. Per instanceId, inserisci test-instance.
      La pagina di creazione dell'istanza Prova dovrebbe ora avere il seguente aspetto:

      Pagina di creazione dell&#39;istanza nella funzionalità Prova

    7. Fai clic su Esegui. La risposta restituisce un'operazione a lunga esecuzione. Esegui una query su questa operazione per verificarne lo stato.

    Elenca le istanze utilizzando projects.instances.list.

    Crea un database

    Crea un database denominato example-db.

    1. Fai clic su projects.instances.databases.create.
    2. In genitore, inserisci:

      projects/<var>PROJECT_ID</var>/instances/test-instance
      
    3. Fai clic su Aggiungi parametri del corpo della richiesta e seleziona createStatement.

    4. Per createStatement, inserisci:

      CREATE DATABASE `example-db`
      

    Il nome del database, example-db, contiene un trattino, quindi racchiudilo tra apici inversi (`).

    1. Fai clic su Esegui. La risposta restituisce un'operazione a lunga esecuzione. Esegui una query su questa operazione per verificarne lo stato.

    Elenca i tuoi database utilizzando projects.instances.databases.list.

    Crea uno schema

    Utilizza il Data Definition Language (DDL) di Spanner per creare, modificare o eliminare tabelle e per creare o eliminare indici.

    1. Fai clic su projects.instances.databases.updateDdl.
    2. Per database, inserisci:

      projects/<var>PROJECT_ID</var>/instances/test-instance/databases/example-db
      
    3. Per Corpo della richiesta, utilizza quanto segue:

      {
        "statements": [
          "CREATE TABLE Singers ( SingerId INT64 NOT NULL, FirstName STRING(1024), LastName STRING(1024), SingerInfo BYTES(MAX) ) PRIMARY KEY (SingerId)",
         "CREATE TABLE Albums ( SingerId INT64 NOT NULL, AlbumId INT64 NOT NULL, AlbumTitle STRING(MAX)) PRIMARY KEY (SingerId, AlbumId), INTERLEAVE IN PARENT Singers ON DELETE CASCADE"
        ]
      }
      

      L'array statements contiene le istruzioni DDL che definiscono lo schema.

    4. Fai clic su Esegui. La risposta restituisce un'operazione a lunga esecuzione. Esegui una query su questa operazione per verificarne lo stato.

    Lo schema definisce due tabelle, Singers e Albums, per un'applicazione musicale di base. Questo documento utilizza queste tabelle. Controlla lo schema di esempio.

    Recupera lo schema utilizzando projects.instances.databases.getDdl.

    Creare una sessione

    Prima di aggiungere, aggiornare, eliminare o interrogare i dati, crea una sessione. Una sessione rappresenta un canale di comunicazione con il servizio di database Spanner. Non utilizzi direttamente una sessione se utilizzi una libreria client di Spanner, perché la libreria client gestisce le sessioni per tuo conto.

    1. Fai clic su projects.instances.databases.sessions.create.
    2. Per database, inserisci:

      projects/<var>PROJECT_ID</var>/instances/test-instance/databases/example-db
      
    3. Fai clic su Esegui.

    4. La risposta mostra la sessione che hai creato nel modulo

      projects/<var>PROJECT_ID</var>/instances/test-instance/databases/example-db/sessions/<var>SESSION</var>
      

      Utilizza questa sessione quando leggi o scrivi nel database.

    Le sessioni sono pensate per durare a lungo. Il servizio di database Spanner elimina una sessione quando è inattiva per più di un'ora. I tentativi di utilizzare una sessione eliminata restituiscono NOT_FOUND. Se si verifica questo errore, crea e utilizza una nuova sessione. Verifica se una sessione è ancora attiva utilizzando projects.instances.databases.sessions.get.

    Per informazioni correlate, vedi Mantenere attiva una sessione inattiva.

    Le sessioni sono un concetto avanzato. Per maggiori dettagli e best practice, consulta Sessioni.

    Successivamente, scrivi i dati nel database.

    Scrivi dati

    Scrivi i dati utilizzando il tipo Mutation. Un Mutation è un contenitore per le operazioni di mutazione. Una Mutation rappresenta una sequenza di inserimenti, aggiornamenti, eliminazioni e altre azioni che vengono applicate in modo atomico a diverse righe e tabelle in un database Spanner.

    1. Fai clic su projects.instances.databases.sessions.commit.
    2. Per sessione, inserisci:

      projects/<var>PROJECT_ID</var>/instances/test-instance/databases/example-db/sessions/<var>SESSION</var>
      
    3. Per Corpo della richiesta, utilizza quanto segue:

       {
         "singleUseTransaction": {
           "readWrite": {}
         },
         "mutations": [
           {
             "insertOrUpdate": {
               "table": "Singers",
               "columns": [
                 "SingerId",
                 "FirstName",
                 "LastName"
               ],
               "values": [
                 [
                   "1",
                   "Marc",
                   "Richards"
                 ],
                 [
                   "2",
                   "Catalina",
                   "Smith"
                 ],
                 [
                   "3",
                   "Alice",
                   "Trentor"
                 ],
                 [
                   "4",
                   "Lea",
                   "Martin"
                 ],
                 [
                   "5",
                   "David",
                   "Lomond"
                 ]
               ]
             }
           },
           {
             "insertOrUpdate": {
               "table": "Albums",
               "columns": [
                 "SingerId",
                 "AlbumId",
                 "AlbumTitle"
               ],
               "values": [
                 [
                   "1",
                   "1",
                   "Total Junk"
                 ],
                 [
                   "1",
                   "2",
                   "Go, Go, Go"
                 ],
                 [
                   "2",
                   "1",
                   "Green"
                 ],
                 [
                   "2",
                   "2",
                   "Forever Hold Your Peace"
                 ],
                 [
                   "2",
                   "3",
                   "Terrified"
                 ]
               ]
             }
           }
         ]
       }
      
    4. Fai clic su Esegui. La risposta mostra il timestamp del commit.

    Questo esempio ha utilizzato insertOrUpdate. Altre operazioni per Mutations sono insert, update, replace e delete.

    Per informazioni su come codificare i tipi di dati, vedi TypeCode.

    Eseguire query sui dati utilizzando SQL

    1. Fai clic su projects.instances.databases.sessions.executeSql.
    2. Per sessione, inserisci:

      projects/<var>PROJECT_ID</var>/instances/test-instance/databases/example-db/sessions/<var>SESSION</var>
      
    3. Per Corpo della richiesta, utilizza quanto segue:

      {
        "sql": "SELECT SingerId, AlbumId, AlbumTitle FROM Albums"
      }
      
    4. Fai clic su Esegui. La risposta mostra i risultati della query.

    Lettura dei dati utilizzando l'API di lettura

    1. Fai clic su projects.instances.databases.sessions.read.
    2. Per sessione, inserisci:

      projects/<var>PROJECT_ID</var>/instances/test-instance/databases/example-db/sessions/<var>SESSION</var>
      
    3. Per Corpo della richiesta, utilizza quanto segue:

      {
        "table": "Albums",
        "columns": [
          "SingerId",
          "AlbumId",
          "AlbumTitle"
        ],
        "keySet": {
          "all": true
        }
      }
      
    4. Fai clic su Esegui. La risposta mostra i risultati della lettura.

    Aggiorna lo schema del database

    Aggiungi una nuova colonna denominata MarketingBudget alla tabella Albums. Ciò richiede un aggiornamento dello schema del database. Spanner supporta gli aggiornamenti dello schema di un database mentre il database continua a gestire il traffico. Gli aggiornamenti dello schema non richiedono di mettere offline il database e non bloccano intere tabelle o colonne. Puoi continuare a scrivere dati nel database durante l'aggiornamento dello schema.

    Aggiungere una colonna

    1. Fai clic su projects.instances.databases.updateDdl.
    2. Per database, inserisci:

      projects/<var>PROJECT_ID</var>/instances/test-instance/databases/example-db
      
    3. Per Corpo della richiesta, utilizza quanto segue:

       {
         "statements": [
           "ALTER TABLE Albums ADD COLUMN MarketingBudget INT64"
         ]
       }
       ```
      
      The `statements` array contains the DDL statements that define the schema.
      
    4. Fai clic su Esegui. Il completamento dell'operazione potrebbe richiedere alcuni minuti, anche dopo che la chiamata REST restituisce una risposta. La risposta restituisce un'operazione a lunga esecuzione. Esegui una query su questa operazione per verificarne lo stato.

    Scrivi i dati nella nuova colonna

    Questo codice scrive i dati nella nuova colonna. Imposta MarketingBudget su 100000 per la riga con chiave Albums(1, 1) e su 500000 per la riga con chiave Albums(2, 2).

    1. Fai clic su projects.instances.databases.sessions.commit.
    2. Per sessione, inserisci:

           projects/<var>PROJECT_ID</var>/instances/test-instance/databases/example-db/sessions/<var>SESSION</var>
      

      Ricevi questo valore quando crei una sessione.

    3. Per Corpo della richiesta, utilizza quanto segue:

       {
         "singleUseTransaction": {
           "readWrite": {}
         },
         "mutations": [
           {
             "update": {
               "table": "Albums",
               "columns": [
                 "SingerId",
                 "AlbumId",
                 "MarketingBudget"
               ],
               "values": [
                 [
                   "1",
                   "1",
                   "100000"
                 ],
                 [
                   "2",
                   "2",
                   "500000"
                 ]
               ]
             }
           }
         ]
       }
      
    4. Fai clic su Esegui. La risposta mostra il timestamp del commit.

    Esegui una query SQL o una chiamata di lettura per recuperare i valori che hai appena scritto.

    1. Fai clic su projects.instances.databases.sessions.executeSql.
    2. Per sessione, inserisci:

      projects/<var>PROJECT_ID</var>/instances/test-instance/databases/example-db/sessions/<var>SESSION</var>
      
    3. Per Corpo della richiesta, utilizza quanto segue:

       {
         "sql": "SELECT SingerId, AlbumId, MarketingBudget FROM Albums"
       }
      
    4. Fai clic su Esegui. La risposta mostra due righe che contengono i valori MarketingBudget aggiornati:

       "rows": [
         [
           "1",
           "1",
           "100000"
         ],
         [
           "1",
           "2",
           null
         ],
         [
           "2",
           "1",
           null
         ],
         [
           "2",
           "2",
           "500000"
         ],
         [
           "2",
           "3",
           null
         ]
       ]
      

    Utilizzare un indice secondario

    Per recuperare tutte le righe di Albums che hanno valori AlbumTitle in un determinato intervallo, leggi tutti i valori della colonna AlbumTitle utilizzando un'istruzione SQL o una chiamata di lettura, quindi scarta le righe che non soddisfano i criteri. Tuttavia, questa scansione completa della tabella è costosa, soprattutto per le tabelle con molte righe. Per velocizzare il recupero delle righe durante la ricerca per colonne non chiave primaria, crea un indice secondario nella tabella.

    L'aggiunta di un indice secondario a una tabella esistente richiede un aggiornamento dello schema. Analogamente ad altri aggiornamenti dello schema, Spanner supporta l'aggiunta di un indice mentre il database continua a gestire il traffico. Spanner esegue automaticamente il backfill dell'indice con i dati esistenti. Il completamento dei backfill potrebbe richiedere alcuni minuti, ma non è necessario mettere offline il database o evitare di scrivere in determinate tabelle o colonne durante questo processo. Per ulteriori informazioni, consulta la sezione Backfilling dell'indice.

    Dopo aver aggiunto un indice secondario, Spanner lo utilizza automaticamente per le query SQL che vengono eseguite più rapidamente con l'indice. Se utilizzi l'interfaccia di lettura, specifica l'indice che vuoi utilizzare.

    Aggiungere un indice secondario

    Aggiungi un indice utilizzando updateDdl.

    1. Fai clic su projects.instances.databases.updateDdl.
    2. Per database, inserisci:

      projects/<var>PROJECT_ID</var>/instances/test-instance/databases/example-db
      
    3. Per Corpo della richiesta, utilizza quanto segue:

      {
         "statements": [
           "CREATE INDEX AlbumsByAlbumTitle ON Albums(AlbumTitle)"
         ]
      }
      
    4. Fai clic su Esegui. Il completamento dell'operazione potrebbe richiedere alcuni minuti, anche dopo che la chiamata REST restituisce una risposta. La risposta restituisce un'operazione a lunga esecuzione. Esegui una query su questa operazione per verificarne lo stato.

    Query che utilizza l'indice

    1. Fai clic su projects.instances.databases.sessions.executeSql.
    2. Per sessione, inserisci:

      projects/<var>PROJECT_ID</var>/instances/test-instance/databases/example-db/sessions/<var>SESSION</var>
      
    3. Per Corpo della richiesta, utilizza quanto segue:

      {
        "sql": "SELECT AlbumId, AlbumTitle, MarketingBudget FROM Albums WHERE AlbumTitle >= 'Aardvark' AND AlbumTitle < 'Goo'"
      }
      
    4. Fai clic su Esegui. La risposta mostra le seguenti righe:

      "rows": [
         [
           "2",
           "Go, Go, Go",
           null
         ],
         [
           "2",
           "Forever Hold Your Peace",
           "500000"
         ]
      ]
      

    Lettura utilizzando l'indice

    1. Fai clic su projects.instances.databases.sessions.read.
    2. Per sessione, inserisci:

      projects/<var>PROJECT_ID</var>/instances/test-instance/databases/example-db/sessions/<var>SESSION</var>
      
    3. Per Corpo della richiesta, utilizza quanto segue:

      {
         "table": "Albums",
         "columns": [
           "AlbumId",
           "AlbumTitle"
         ],
         "keySet": {
           "all": true
         },
         "index": "AlbumsByAlbumTitle"
      }
      
    4. Fai clic su Esegui. La risposta mostra le seguenti righe:

      "rows": [
         [
           "2",
           "Forever Hold Your Peace"
         ],
         [
           "2",
           "Go, Go, Go"
         ],
         [
           "1",
           "Green"
         ],
         [
           "3",
           "Terrified"
         ],
         [
           "1",
           "Total Junk"
         ]
      ]
      

    Aggiungi un indice con la clausola STORING

    L'esempio di lettura precedente non includeva la colonna MarketingBudget. Ciò si verifica perché l'interfaccia di lettura di Spanner non supporta l'unione di un indice con una tabella di dati per cercare valori non archiviati nell'indice.

    Crea una definizione alternativa di AlbumsByAlbumTitle che memorizzi una copia di MarketingBudget nell'indice.

    Aggiungi un indice STORING utilizzando updateDdl.

    1. Fai clic su projects.instances.databases.updateDdl.
    2. Per database, inserisci:

      projects/<var>PROJECT_ID</var>/instances/test-instance/databases/example-db
      
    3. Per Corpo della richiesta, utilizza quanto segue:

      {
        "statements": [
          "CREATE INDEX AlbumsByAlbumTitle2 ON Albums(AlbumTitle) STORING (MarketingBudget)"
        ]
      }
      
    4. Fai clic su Esegui. Il completamento dell'operazione potrebbe richiedere alcuni minuti, anche dopo che la chiamata REST restituisce una risposta. La risposta restituisce un'operazione a lunga esecuzione. Esegui una query su questa operazione per verificarne lo stato.

    Ora esegui una lettura che recupera tutte le colonne AlbumId, AlbumTitle e MarketingBudget dall'indice AlbumsByAlbumTitle2:

    1. Fai clic su projects.instances.databases.sessions.read.
    2. Per sessione, inserisci:

      projects/<var>PROJECT_ID</var>/instances/test-instance/databases/example-db/sessions/<var>SESSION</var>
      
    3. Per Corpo della richiesta, utilizza quanto segue:

      {
        "table": "Albums",
        "columns": [
          "AlbumId",
          "AlbumTitle",
          "MarketingBudget"
        ],
        "keySet": {
          "all": true
        },
        "index": "AlbumsByAlbumTitle2"
      }
      
    4. Fai clic su Esegui. La risposta mostra le seguenti righe:

      "rows": [
         [
           "2",
           "Forever Hold Your Peace",
           "500000"
         ],
         [
           "2",
           "Go, Go, Go",
           null
         ],
         [
           "1",
           "Green",
           null
         ],
         [
           "3",
           "Terrified",
           null
         ],
         [
           "1",
           "Total Junk",
           "100000"
         ]
      ]
      

    Recuperare i dati utilizzando le transazioni di sola lettura

    Per eseguire più di una lettura con lo stesso timestamp, utilizza le transazioni di sola lettura. Queste transazioni rispettano un prefisso coerente della cronologia dei commit delle transazioni, quindi la tua applicazione riceve sempre dati coerenti.

    Creare una transazione di sola lettura

    1. Fai clic su projects.instances.databases.sessions.beginTransaction.
    2. Per sessione, inserisci:

      projects/<var>PROJECT_ID</var>/instances/test-instance/databases/example-db/sessions/<var>SESSION</var>
      
    3. Per Request Body, utilizza quanto segue:

      {
        "options": {
          "readOnly": {}
        }
      }
      
    4. Fai clic su Esegui.

    5. La risposta mostra l'ID della transazione che hai creato.

    Utilizza la transazione di sola lettura per recuperare i dati a un timestamp coerente, anche se i dati sono cambiati dopo la creazione della transazione di sola lettura.

    Eseguire una query utilizzando la transazione di sola lettura

    1. Fai clic su projects.instances.databases.sessions.executeSql.
    2. Per sessione, inserisci:

      projects/<var>PROJECT_ID</var>/instances/test-instance/databases/example-db/sessions/<var>SESSION</var>
      
    3. Per Corpo della richiesta, utilizza quanto segue:

      {
        "sql": "SELECT SingerId, AlbumId, AlbumTitle FROM Albums",
        "transaction": {
          "id": "<var>TRANSACTION_ID</var>"
        }
      }
      
    4. Fai clic su Esegui. La risposta mostra righe simili alle seguenti:

      "rows": [
         [
           "2",
           "2",
           "Forever Hold Your Peace"
         ],
         [
           "1",
           "2",
           "Go, Go, Go"
         ],
         [
           "2",
           "1",
           "Green"
         ],
         [
           "2",
           "3",
           "Terrified"
         ],
         [
           "1",
           "1",
           "Total Junk"
         ]
      ]
      

    Lettura utilizzando la transazione di sola lettura

    1. Fai clic su projects.instances.databases.sessions.read.
    2. Per sessione, inserisci:

      projects/<var>PROJECT_ID</var>/instances/test-instance/databases/example-db/sessions/<var>SESSION</var>
      
    3. Per Corpo della richiesta, utilizza quanto segue:

      {
         "table": "Albums",
         "columns": [
           "SingerId",
           "AlbumId",
           "AlbumTitle"
         ],
         "keySet": {
           "all": true
         },
         "transaction": {
           "id": "<var>TRANSACTION_ID</var>"
         }
      }
      
    4. Fai clic su Esegui. La risposta mostra righe simili alle seguenti:

      "rows": [
         [
           "1",
           "1",
           "Total Junk"
         ],
         [
           "1",
           "2",
           "Go, Go, Go"
         ],
         [
           "2",
           "1",
           "Green"
         ],
         [
           "2",
           "2",
           "Forever Hold Your Peace"
         ],
         [
           "2",
           "3",
           "Terrified"
         ]
      ]
      

    Spanner supporta anche le transazioni di lettura/scrittura, che eseguono un insieme di letture e scritture in modo atomico in un unico punto logico nel tempo. Per ulteriori informazioni, consulta la sezione Transazioni di lettura/scrittura. (La funzionalità Prova non è adatta per dimostrare una transazione di lettura/scrittura.)

    Esegui la pulizia

    Per evitare costi aggiuntivi al tuo account Google Cloud per le risorse utilizzate in questo tutorial, elimina il database e l'istanza che hai creato.

    Elimina un database

    1. Fai clic su projects.instances.databases.dropDatabase.
    2. In Nome, inserisci:

      projects/<var>PROJECT_ID</var>/instances/test-instance/databases/example-db
      
    3. Fai clic su Esegui.

    Elimina un'istanza

    1. Fai clic su projects.instances.delete.
    2. In Nome, inserisci:

      projects/<var>PROJECT_ID</var>/instances/test-instance
      
    3. Fai clic su Esegui.

Passaggi successivi