Azure Table Storage en Azure Cosmos DB for Table gebruiken met Ruby

VAN TOEPASSING OP: Tabel

Waarschuwing

Dit project bevindt zich in de ondersteuningsfase van de community van de levenscyclus. Uiteindelijk worden alle gekoppelde clientbibliotheken definitief buiten gebruik gesteld. Zie Kennisgeving over buitengebruikstelling : Azure Storage PHP-clientbibliotheken voor meer informatie over buitengebruikstelling en alternatieven voor het gebruik van dit project.

Tip

De inhoud in dit artikel is van toepassing op Azure Table Storage en Azure Cosmos DB for Table. De API voor Tabel is een premium-aanbieding voor tabelopslag die tabellen die zijn geoptimaliseerd voor doorvoer, wereldwijde distributie en automatische secundaire indexen biedt.

Dit artikel laat zien hoe u tabellen maakt, uw gegevens opslaat en CRUD-bewerkingen op de gegevens uitvoert. Kies de Azure Table-service of de Azure Cosmos DB for Table. De voorbeelden in dit artikel zijn geschreven in Ruby en maken gebruik van de Azure Storage Table-clientbibliotheek voor Ruby. De behandelde scenario’s zijn onder meer het maken van een tabel, het verwijderen van een tabel, het invoegen van entiteiten en het uitvoeren van query’s op entiteiten vanuit de tabel.

Azure-serviceaccount maken

U kunt in Azure Table Storage of in Azure Cosmos DB met tabellen werken. Zie overzicht van API for Table voor meer informatie over de verschillen tussen tabelaanbiedingen in deze twee services. U moet een account maken voor de service die u gaat gebruiken. De volgende secties laten zien hoe u zowel een Azure Table Storage- als een Azure Cosmos DB-account maakt. U kunt echter slechts één daarvan gebruiken.

Azure-tabelopslag

De eenvoudigste manier om uw eerste Azure-opslagaccount te maken, is via de Azure-portal. Zie Een opslagaccount maken voor meer informatie.

U kunt ook een Azure Storage-account maken met behulp van Azure PowerShell of de Azure CLI.

Als u op dit moment liever nog geen opslagaccount maakt, kunt u ook de Azure-opslagemulator gebruiken om de code in een lokale omgeving uit te voeren en te testen. Zie De Azure-opslagemulator gebruiken voor ontwikkelen en testen voor meer informatie.

Azure Cosmos DB voor tabel

Zie Een databaseaccount maken voor instructies voor het maken van een Azure Cosmos DB for Table-account.

Toegang toevoegen aan Azure Storage of Azure Cosmos DB

Als u Azure Storage of Azure Cosmos DB wilt gebruiken, downloadt en gebruikt u het Ruby Azure-pakket. Dit pakket bevat een set gemaksbibliotheken die communiceren met de Table REST-services.

RubyGems gebruiken om het pakket te verkrijgen

  1. Gebruik een opdrachtregelinterface zoals PowerShell (Windows), Terminal (Mac) of Bash (Unix).
  2. Typ gem install azure-storage-table in het opdrachtvenster om de gem en afhankelijkheden te installeren.

Het pakket importeren

Gebruik uw favoriete teksteditor en voeg het volgende toe aan het begin van het Ruby-bestand waar u Storage wilt gebruiken:

require "azure/storage/table"

Uw verbindingsreeks toevoegen

U kunt verbinding maken met het Azure-opslagaccount of het Azure Cosmos DB for Table-account. Haal de verbindingsreeks op op basis van het type account dat u gebruikt.

Een Azure Storage-verbinding toevoegen

De Azure Storage-module leest de omgevingsvariabelen AZURE_STORAGE_ACCOUNT en AZURE_STORAGE_ACCESS_KEY voor de informatie die nodig is om verbinding te maken met uw Azure Storage-account. Als deze omgevingsvariabelen niet zijn ingesteld, moet u de accountgegevens opgeven voordat u Azure::Storage::Table::TableService gebruikt met de volgende code:

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

U verkrijgt deze waarden als volgt van een klassiek of Resource Manager-opslagaccount op Azure Portal:

  1. Meld u aan bij Azure Portal.
  2. Ga naar het opslagaccount dat u wilt gebruiken.
  3. Selecteer op de pagina Instellingen de optie Toegangssleutels.
  4. Bekijk toegangssleutel 1 en toegangssleutel 2 op de pagina Toegangssleutels. U kunt een van deze sleutels gebruiken.
  5. Selecteer het kopieerpictogram om de sleutel naar het klembord te kopiëren.

Een Azure Cosmos DB-verbinding toevoegen

Wanneer u verbinding wilt maken met Azure Cosmos DB, kopieert u de primaire verbindingsreeks vanuit de Azure Portal en maakt u een Client-object met de gekopieerde verbindingsreeks. U kunt het Client-object doorgeven bij het maken van een TableService-object:

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)

Een tabel maken

Het object Azure::Storage::Table::TableService biedt u de mogelijkheid te werken met tabellen en entiteiten. U maakt een tabel met de create_table() -methode. In het volgende voorbeeld wordt een tabel gemaakt of wordt de fout afgedrukt, indien aanwezig.

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

Een entiteit toevoegen aan een tabel

Wanneer u een entiteit wilt toevoegen, moet u eerst een hashobject maken dat uw entiteitseigenschappen definieert. Voor elke entiteit moet u een PartitionKey en RowKey opgeven. Deze entiteiten zijn de unieke id's van uw entiteiten en zijn waarden die sneller kunnen worden opgevraagd dan uw andere eigenschappen. Azure Storage maakt gebruik van PartitionKey om de entiteiten van de tabel automatisch over veel Storage-knooppunten te verdelen. Entiteiten met dezelfde PartitionKey worden opgeslagen op hetzelfde knooppunt. De RowKey is de unieke id van de entiteit binnen de partitie waar deze bij hoort.

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

Een entiteit bijwerken

Er zijn meerdere methoden beschikbaar voor het bijwerken van een bestaande entiteit:

Description
update_entity() werkt een bestaande entiteit bij door deze te vervangen.
merge_entity() werkt een bestaande entiteit bij door nieuwe eigenschapswaarden in de bestaande entiteit samen te voegen.
insert_or_merge_entity() werkt een bestaande entiteit bij door deze te vervangen. Als er geen entiteit bestaat, wordt er een nieuwe ingevoegd.
insert_or_replace_entity() werkt een bestaande entiteit bij door nieuwe eigenschapswaarden in de bestaande entiteit samen te voegen. Als er geen entiteit bestaat, wordt er een nieuwe ingevoegd.

Het volgende voorbeeld laat zien hoe u een entiteit bijwerkt met update_entity() :

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

Met update_entity() en merge_entity() mislukt de updatebewerking als de entiteit die u bijwerkt niet bestaat. Dus als een entiteit wilt opslaan ongeacht of deze al bestaat, gebruikt u in plaats daarvan insert_or_replace_entity() of insert_or_merge_entity() .

Werken met groepen entiteiten

Soms is het zinvol om meerdere bewerkingen samen in een batch te verzenden om te zorgen dat ze atomisch worden verwerkt door de server. Om dat te realiseren, maakt u eerst een Batch-object en gebruikt u vervolgens de execute_batch() -methode op TableService. In het volgende voorbeeld ziet u hoe u twee entiteiten met RowKey 2 en 3 in een batch kunt verzenden. Dit werkt alleen voor entiteiten met dezelfde PartitionKey.

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)

Een query uitvoeren voor een entiteit

Wanneer u een query wilt uitvoeren voor een entiteit in een tabel, gebruikt u de get_entity() -methode en geeft u de tabelnaam, PartitionKey en RowKey door.

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

Een query uitvoeren voor een aantal entiteiten

Wanneer u een query wilt uitvoeren voor een aantal entiteiten in een tabel, maakt u een query-hash-object en gebruikt u de query_entities() -methode. Het volgende voorbeeld ziet u hoe u alle entiteiten kunt ophalen met dezelfde PartitionKey:

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

Notitie

Als de resultatenset te groot is om in één query om te retourneren, wordt een vervolgtoken geretourneerd dat u kunt gebruiken kunt voor het ophalen van de volgende pagina's.

Een query uitvoeren op een subset van entiteitseigenschappen

Met een query naar een tabel kunnen slechts enkele eigenschappen van een entiteit worden opgehaald. Deze 'projectie'-techniek vermindert de bandbreedte en kan de queryprestaties verbeteren, met name voor grote entiteiten. Gebruik de geselecteerde component en geef de namen van de eigenschappen door die u wilt overbrengen naar de client.

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

Een entiteit verwijderen

U verwijdert een entiteit met de methode delete_entity() . Geef de naam van de tabel door die de entiteit, de PartitionKey en de RowKey van de entiteit bevat.

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

Een tabel verwijderen

U verwijdert een tabel met de methode delete_table() en geeft hierbij de naam van de tabel door die u wilt verwijderen.

azure_table_service.delete_table("testtable")