Erste Schritte mit Spanner in C++

Ziele

In dieser Anleitung werden Sie durch die folgenden Schritte mit der Spanner-Clientbibliothek für C++ geführt:

  • Spanner-Instanz und -Datenbank erstellen
  • SQL-Abfragen für Daten in der Datenbank schreiben, lesen und ausführen
  • Datenbankschema aktualisieren
  • Daten mit einer Lese-Schreib-Transaktion aktualisieren
  • Sekundären Index für die Datenbank hinzufügen
  • Mit dem Index Daten lesen und SQL-Abfragen ausführen
  • Daten über eine schreibgeschützte Transaktion abrufen

Kosten

In dieser Anleitung wird Spanner verwendet, eine kostenpflichtige Komponente vonGoogle Cloud. Informationen zu den Kosten für die Verwendung von Cloud Spanner finden Sie unter Preise.

Hinweis

Führen Sie die unter Einrichten beschriebenen Schritte aus, die das Erstellen und Festlegen eines Standardprojekts Google Cloud , das Aktivieren der Abrechnung, das Aktivieren der Cloud Spanner API und das Einrichten von OAuth 2.0 umfassen, um Anmeldedaten für die Authentifizierung für die Verwendung der Cloud Spanner API zu erhalten.

Sie müssen insbesondere gcloud auth application-default login ausführen, um die lokale Entwicklungsumgebung mit Anmeldedaten für die Authentifizierung einzurichten.

Lokale C++-Umgebung vorbereiten

  1. Klonen Sie das Repository der Beispiel-App auf Ihren lokalen Computer:

    git clone https://github.com/googleapis/google-cloud-cpp $HOME/google-cloud-cpp
    
  2. Installieren Sie Bazel für Linux mithilfe dieser Anleitung.

  3. Wechseln Sie in das Verzeichnis, das den Spanner-Beispielcode enthält:

    cd $HOME/google-cloud-cpp
    
  4. Erstellen Sie die Beispiele mit diesem Befehl:

    bazel build //google/cloud/spanner/samples:samples
    
  5. Richten Sie die Authentifizierung und Autorisierung für das Projekt google-cloud-cpp ein.

    gcloud auth application-default login
    
  6. Erstellen Sie eine Umgebungsvariable mit dem Namen PROJECT_ID. Ersetzen Sie [MY_PROJECT_ID] durch Ihre Google Cloud Projekt-ID. Sie finden sie auf der Begrüßungsseite Ihres Projekts.

    export PROJECT_ID=[MY_PROJECT_ID]
    

Instanz erstellen

Wenn Sie Spanner zum ersten Mal verwenden, müssen Sie eine Instanz erstellen. Dabei handelt es sich um eine Zuordnung von Ressourcen, die von Spanner-Datenbanken verwendet werden. Wenn Sie eine Instanz erstellen, müssen Sie eine Instanzkonfiguration auswählen. Abhängig davon werden der Speicherort Ihrer Daten sowie die Anzahl der zu verwendenden Knoten festgelegt. Anhand der Knotenanzahl wird dann die Menge der Bereitstellungs- und Speicherressourcen in Ihrer Instanz festgelegt.

Informationen zum Erstellen einer Spanner-Instanz mit einer der folgenden Methoden finden Sie unter Instanz erstellen. Sie können Ihre Instanz test-instance nennen, um sie mit anderen Themen in diesem Dokument zu verwenden, in denen auf eine Instanz mit dem Namen test-instance verwiesen wird.

  • Google Cloud CLI
  • Die Google Cloud Console
  • Eine Clientbibliothek (C++, C#, Go, Java, Node.js, PHP, Python oder Ruby)

Beispieldateien ansehen

Das Beispiel-Repository enthält ein Beispiel für die Verwendung von Spanner mit C++.

Sehen Sie in der Datei google/cloud/spanner/samples/samples.cc nach, wie Sie eine Datenbank erstellen und ein Datenbankschema ändern. In den Daten wird das auf der Seite Schema und Datenmodell angezeigte Beispielschema verwendet.

Datenbank erstellen

GoogleSQL

bazel run //google/cloud/spanner/samples:samples -- \
      create-database PROJECT_ID test-instance example-db

PostgreSQL

bazel run //google/cloud/spanner/samples:postgresql_samples -- \
      create-database PROJECT_ID test-instance example-db

bazel run //google/cloud/spanner/samples:postgresql_samples -- \
      interleaved-table PROJECT_ID test-instance example-db

Hier sollten Sie dies sehen:

Created database [projects/${PROJECT_ID}/instances/test-instance/databases/example-db]
Mit dem folgenden Code wird eine Datenbank und zwei Tabellen in der Datenbank erstellt.

GoogleSQL

void CreateDatabase(google::cloud::spanner_admin::DatabaseAdminClient client,
                    std::string const& project_id,
                    std::string const& instance_id,
                    std::string const& database_id) {
  google::cloud::spanner::Database database(project_id, instance_id,
                                            database_id);
  google::spanner::admin::database::v1::CreateDatabaseRequest request;
  request.set_parent(database.instance().FullName());
  request.set_create_statement("CREATE DATABASE `" + database.database_id() +