Verwenden von Azure Table Storage und Azure Cosmos DB for Table mit Ruby

GILT FÜR: Tabelle

Warnung

Dieses Projekt befindet sich in der Community-Supportphase des Lebenszyklus. Schließlich werden alle zugeordneten Clientbibliotheken endgültig eingestellt. Weitere Informationen zur Einstellung und Alternativen zur Verwendung dieses Projekts finden Sie unter Einstellungshinweis: Azure Storage PHP-Clientbibliotheken.

Tipp

Der Inhalt in diesem Artikel gilt für Azure Table Storage und Azure Cosmos DB for Table. Die API für Tabelle ist ein Premium-Angebot für Tabellenspeicher, das durchsatzoptimierte Tabellen, globale Verteilung und automatische sekundäre Indizes bietet.

In diesem Artikel erfahren Sie, wie Sie Tabellen erstellen, Daten speichern und CRUD-Vorgänge für die Daten ausführen. Wählen Sie entweder den Azure Table-Dienst oder Azure Cosmos DB for Table aus. Die in diesem Artikel beschriebenen Beispiele sind in Ruby geschrieben und greifen auf die Azure Storage Table-Clientbibliothek für Ruby zurück. Die behandelten Szenarien umfassen das Erstellen einer Tabelle, das Löschen einer Tabelle, das Einfügen von Entitäten und das Abfragen von Entitäten aus der Tabelle.

Erstellen eines Azure-Dienstkontos

Sie können im Azure-Tabellenspeicher oder in Azure Cosmos DB mit Tabellen arbeiten. Weitere Informationen zu den Unterschieden zwischen Tabellenangeboten dieser beiden Dienste finden Sie in der Übersicht zur API für Table. Sie müssen ein Konto für den Dienst erstellen, den Sie verwenden möchten. In den folgenden Abschnitten wird gezeigt, wie Sie sowohl den Azure-Tabellenspeicher als auch das Azure Cosmos DB-Konto erstellen können. Sie können jedoch auch nur eines von beiden verwenden.

Azure Table Storage

Ein Azure-Speicherkonto erstellen Sie am einfachsten im Azure-Portal. Weitere Informationen finden Sie unter Erstellen von Speicherkonten.

Sie können ein Azure-Speicherkonto auch mit Azure PowerShell oder mit der Azure CLI erstellen.

Wenn Sie zu diesem Zeitpunkt kein Speicherkonto erstellen möchten, können Sie auch den Azure-Speicheremulator zum Ausführen und Testen Ihres Codes in einer lokalen Umgebung verwenden. Weitere Informationen finden Sie unter Verwenden des Azure-Speicheremulators für Entwicklung und Tests.

Azure Cosmos DB for Table

Anweisungen zum Erstellen eines Kontos für Azure Cosmos DB for Table finden Sie unter Erstellen eines Datenbankkontos.

Hinzufügen des Zugriffs auf Azure Storage oder Azure Cosmos DB

Um Azure Storage oder Azure Cosmos DB zu verwenden, laden Sie das Azure-Paket Ruby herunter, und verwenden Sie es. Dieses Paket enthält eine Reihe von Komfortbibliotheken, die mit den Tabellen-REST-Diensten kommunizieren.

Verwenden von RubyGems zum Abrufen des Pakets

  1. Verwenden Sie eine Befehlszeilenschnittstelle wie PowerShell (Windows), Terminal (Mac) oder Bash (Unix).
  2. Geben Sie im Befehlsfenster gem install azure-storage-table ein, um das Gem und Abhängigkeiten zu installieren.

Importieren des Pakets

Fügen Sie mit Ihrem bevorzugten Texteditor Folgendes oben in die Ruby-Datei an der Stelle ein, an der Sie Storage verwenden möchten:

require "azure/storage/table"

Hinzufügen der Verbindungszeichenfolge

Sie können entweder eine Verbindung mit dem Azure Storage-Konto oder dem Konto für Azure Cosmos DB for Table herstellen. Rufen Sie die Verbindungszeichenfolge basierend auf dem Typ des verwendeten Kontos ab.

Hinzufügen einer Azure Storage-Verbindung

Das Azure Storage-Modul liest die Umgebungsvariablen AZURE_STORAGE_ACCOUNT und AZURE_STORAGE_ACCESS_KEY nach Informationen aus, die erforderlich sind, um eine Verbindung mit Ihrem Azure Storage-Konto herzustellen. Wenn diese Umgebungsvariablen nicht festgelegt sind, müssen Sie die Kontoinformationen angeben, bevor Sie Azure::Storage::TableService mit dem folgenden Code verwenden:

Azure.config.storage_account_name = "<your Azure Storage account>"
Azure.config.storage_access_key = "<your Azure Storage access key>"

So rufen Sie diese Werte aus einem klassischen oder Resource Manager-Speicherkonto im Azure-Portal ab

  1. Melden Sie sich beim Azure-Portalan.
  2. Navigieren Sie zum Storage-Konto, das Sie verwenden möchten.
  3. Wählen Sie auf der Seite Einstellungen die Option Zugriffsschlüssel aus.
  4. Beachten Sie auf der Seite Zugriffsschlüssel den Zugriffsschlüssel 1 und den Zugriffsschlüssel 2. Sie können einen dieser Schlüssel verwenden.
  5. Wählen das Kopiersymbol aus, um den Schlüssel in die Zwischenablage zu kopieren.

Hinzufügen einer Azure Cosmos DB-Verbindung

Wenn Sie eine Verbindung mit Azure Cosmos DB herstellen möchten, kopieren Sie die primäre Verbindungszeichenfolge aus dem Azure-Portal und erstellen mithilfe der kopierten Verbindungszeichenfolge ein Client-Objekt. Sie können das Client-Objekt bei der Erstellung eines TableService-Objekts übergeben:

common_client = Azure::Storage::Common::Client.create(storage_account_name:'myaccount', storage_access_key:'mykey', storage_table_host:'mycosmosdb_endpoint')
table_client = Azure::Storage::Table::TableService.new(client: common_client)

Erstellen einer Tabelle

Mit dem Objekt Azure::Storage::Table::TableService können Sie mit Tabellen und Entitäten arbeiten. Verwenden Sie die create_table() -Methode, um eine Tabelle zu erstellen. Im folgenden Beispiel wird eine Tabelle erstellt oder der Fehler ausgegeben, falls vorhanden.

azure_table_service = Azure::Storage::Table::TableService.new
begin
    azure_table_service.create_table("testtable")
rescue
    puts $!
end

Hinzufügen einer Entität zu einer Tabelle

Um eine Entität hinzuzufügen, erstellen Sie zunächst ein Hashobjekt, das die Entitätseigenschaften definiert. Für jede Entität müssen Sie partitionKey und RowKey angeben. Diese Entitäten sind die eindeutigen Bezeichner Ihrer Entitäten und sind Werte, die schneller abgefragt werden können als Ihre anderen Eigenschaften. Azure Storage verwendet PartitionKey , um die Entitäten der Tabelle automatisch über viele Speicherknoten zu verteilen. Entitäten mit dem gleichen PartitionKey werden auf dem gleichen Knoten gespeichert. Der RowKey -Wert ist eine eindeutige ID der Entität innerhalb der Partition, zu der sie gehört.

entity = { "content" => "test entity",
    :PartitionKey => "test-partition-key", :RowKey => "1" }
azure_table_service.insert_entity("testtable", entity)

Aktualisieren einer Entität

Es sind mehrere Methoden zum Aktualisieren einer vorhandenen Entität vorhanden:

BESCHREIBUNG
update_entity() Aktualisiert eine vorhandene Entität, indem sie ersetzt wird.
merge_entity() Aktualisiert eine vorhandene Entität durch Zusammenführen neuer Eigenschaftswerte mit der vorhandenen Entität.
insert_or_merge_entity() Aktualisiert eine vorhandene Entität, indem sie ersetzt wird. Wenn keine Entität vorhanden ist, wird eine neue Entität eingefügt.
insert_or_replace_entity() Aktualisiert eine vorhandene Entität durch Zusammenführen neuer Eigenschaftswerte mit der vorhandenen Entität. Wenn keine Entität vorhanden ist, wird eine neue Entität eingefügt.

Das folgende Beispiel zeigt, wie eine Entität mit update_entity() aktualisiert wird:

entity = { "content" => "test entity with updated content",
    :PartitionKey => "test-partition-key", :RowKey => "1" }
azure_table_service.update_entity("testtable", entity)

Bei update_entity() und merge_entity() schlägt der Aktualisierungsvorgang fehl, wenn die entität, die Sie aktualisieren, nicht vorhanden ist. Daher müssen Sie stattdessen insert_or_replace_entity() oder insert_or_merge_entity() verwenden, wenn Sie eine Entität unabhängig davon speichern möchten, ob sie bereits vorhanden ist.

Arbeiten mit Gruppen von Entitäten

Gelegentlich ist es sinnvoll, mehrere Vorgänge zusammen in einem Batch zu senden, um die atomische Verarbeitung durch den Server sicherzustellen. Dazu erstellen Sie zunächst ein Batch-Objekt und verwenden dann die execute_batch() -Methode für TableService. Das folgende Beispiel demonstriert das Senden von zwei Entitäten mit RowKey 2 und 3 in einem Batch. Beachten Sie, dass dies nur für Entitäten mit dem gleichen PartitionKey funktioniert.

azure_table_service = Azure::TableService.new
batch = Azure::Storage::Table::Batch.new("testtable",
    "test-partition-key") do
    insert "2", { "content" => "new content 2" }
    insert "3", { "content" => "new content 3" }
end
results = azure_table_service.execute_batch(batch)

Abfragen einer Entität

Um eine Entität in einer Tabelle abzufragen, verwenden Sie die get_entity() -Methode, indem Sie ihr den Tabellennamen, PartitionKey und RowKey übergeben.

result = azure_table_service.get_entity("testtable", "test-partition-key",
    "1")

Abfragen einer Gruppe von Entitäten

Um eine Gruppe von Entitäten in einer Tabelle abzufragen, erstellen Sie ein Hashobjekt und verwenden die query_entities() -Methode. Das folgende Beispiel demonstriert das Abrufen aller Entitäten mit dem gleichen PartitionKey:

query = { :filter => "PartitionKey eq 'test-partition-key'" }
result, token = azure_table_service.query_entities("testtable", query)

Hinweis

Wenn die Ergebnisgruppe zu groß für die Rückgabe einer einzelnen Abfrage ist, wird ein Fortsetzungstoken zurückgegeben, mit dem Sie nachfolgende Seiten abrufen können.

Abfragen einer Teilmenge von Entitätseigenschaften

Mit einer Abfrage einer Tabelle können nur einige wenige Eigenschaften einer Entität aufgerufen werden. Diese "Projektion"-Technik reduziert die Bandbreite und kann die Abfrageleistung verbessern, insbesondere bei großen Entitäten. Verwenden Sie die select-Klausel, und übergeben Sie die Namen der Eigenschaften, die an den Client übermittelt werden sollen.

query = { :filter => "PartitionKey eq 'test-partition-key'",
    :select => ["content"] }
result, token = azure_table_service.query_entities("testtable", query)

Löschen einer Entität

Verwenden Sie die delete_entity() -Methode, um eine Entität zu löschen. Übergeben Sie den Namen der Tabelle mit der Entität, dem Partitionsschlüssel und dem Zeilenschlüssel der Entität.

azure_table_service.delete_entity("testtable", "test-partition-key", "1")

Löschen einer Tabelle

Um eine Tabelle zu löschen, verwenden Sie die delete_table() -Methode und übergeben den Namen der zu löschenden Tabelle.

azure_table_service.delete_table("testtable")