Använda Azure Table Storage och Azure Cosmos DB for Table med Ruby

GÄLLER FÖR: Tabell

Varning

Det här projektet är i communityns supportfas i livscykeln. Så småningom dras alla associerade klientbibliotek tillbaka permanent. Mer information om pensionering och alternativ till att använda det här projektet finns i Meddelande om pensionering: Azure Storage PHP-klientbibliotek.

Tips

Innehållet i den här artikeln gäller för Azure Table Storage och Azure Cosmos DB for Table. API:et för tabell är ett premiumerbjudande för tabelllagring som erbjuder dataflödesoptimerade tabeller, global distribution och automatiska sekundära index.

Den här artikeln visar hur du skapar tabeller, lagrar dina data och utför CRUD-åtgärder på data. Välj antingen Azure Table-tjänsten eller Azure Cosmos DB för Table. Exemplen som beskrivs i den här artikeln är skrivna i Ruby och använder Azure Storage Table Client Library för Ruby. De scenarier som beskrivs är skapa en tabell, ta bort en tabell, infoga entiteter och fråga entiteter från tabellen.

Skapa Ett Azure-tjänstkonto

Du kan arbeta med tabeller med hjälp av Azure Table Storage eller Azure Cosmos DB. Mer information om skillnaderna mellan tabellerbjudanden i dessa två tjänster finns i API:et för tabellöversikt. Du måste skapa ett konto för den tjänst som du ska använda. Följande avsnitt visar hur du skapar både Azure Table Storage och Azure Cosmos DB-kontot, men du kan bara använda en av dem.

Azure Table Storage

Det enklaste sättet att skapa ett Azure Storage-konto är att använda Azure Portal. Läs mer i Skapa ett lagringskonto.

Du kan även skapa ett Azure-lagringskonto med hjälp av Azure PowerShell eller Azure CLI.

Om du föredrar att inte skapa ett lagringskonto just nu kan du också använda Azure Storage-emulatorn för att köra och testa koden i en lokal miljö. Mer information finns i Använda Azure Storage-emulatorn för utveckling och testning.

Azure Cosmos DB för tabell

Anvisningar om hur du skapar ett Azure Cosmos DB för tabellkonto finns i Skapa ett databaskonto.

Lägga till åtkomst till Azure Storage eller Azure Cosmos DB

Om du vill använda Azure Storage eller Azure Cosmos DB laddar du ned och använder Ruby Azure-paketet. Det här paketet innehåller en uppsättning bekvämlighetsbibliotek som kommunicerar med Table REST-tjänsterna.

Hämta paketet med hjälp av RubyGems

  1. Använd ett kommandoradsgränssnitt som PowerShell (Windows), Terminal (Mac) eller Bash (Unix).
  2. Installera paketet och beroendena genom att skriva gem install azure-storage-table.

Importera paketet

Använd valfri textredigerare och lägg till följande kod överst i Ruby-filen där du vill använda Storage:

require "azure/storage/table"

Lägg till anslutningssträng

Du kan antingen ansluta till Azure Storage-kontot eller Azure Cosmos DB för tabellkontot. Hämta anslutningssträng baserat på vilken typ av konto du använder.

Lägga till en Azure Storage-anslutning

Azure Storage-modulen läser miljövariablerna AZURE_STORAGE_ACCOUNT och AZURE_STORAGE_ACCESS_KEY och letar efter information som krävs för att ansluta till ditt Azure Storage-konto. Om dessa miljövariabler inte har angetts måste du ange kontoinformationen innan du använder Azure::Storage::Table::TableService med följande kod:

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

Du kan hämta dessa värden från ett klassiskt eller Resource Manager-baserat lagringskonto på Azure Portal:

  1. Logga in på Azure-portalen.
  2. Gå till det lagringskonto som du vill använda.
  3. På sidan Inställningar väljer du Åtkomstnycklar.
  4. Observera åtkomstnyckel 1 och åtkomstnyckel 2 på sidan Åtkomstnycklar. Du kan använda någon av dessa nycklar.
  5. Välj kopieringsikonen för att kopiera nyckeln till Urklipp.

Lägga till en Azure Cosmos DB-anslutning

Du ansluter till Azure Cosmos DB genom att kopiera den primära anslutningssträngen från Azure Portal och skapar sedan ett Client-objekt med hjälp av den kopierade anslutningssträngen. Du kan definiera Client-objektet när du skapar ett TableService-objekt:

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)

Skapa en tabell

Du kan arbeta med tabeller och entiteter med objektet Azure::Storage::Table::TableService. Du skapar en tabell med hjälp av metoden create_table(). I följande exempel skapas en tabell eller felet skrivs ut om det finns några.

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

Lägga till en entitet i en tabell

När du lägger till en entitet börjar du med att skapa ett hash-objekt som definierar entitetens egenskaper. För varje entitet måste du ange en PartitionKey och RowKey. Dessa entiteter är unika identifierare för dina entiteter och är värden som kan efterfrågas snabbare än dina andra egenskaper. Azure Storage använder PartitionKey för att automatiskt distribuera tabellens entiteter mellan flera lagringsnoder. Entiteter med samma PartitionKey lagras på samma nod. RowKey är det unika ID:t för entiteten i den partition som den hör till.

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

Uppdatera en entitet

Du kan uppdatera en befintlig entitet med hjälp av olika metoder:

Description
update_entity() Uppdaterar en befintlig entitet genom att ersätta den.
merge_entity() Uppdaterar en befintlig entitet genom att sammanfoga nya egenskapsvärden i den befintliga entiteten.
insert_or_merge_entity() Uppdaterar en befintlig entitet genom att ersätta den. Om det inte finns någon entitet infogas en ny.
insert_or_replace_entity() Uppdaterar en befintlig entitet genom att sammanfoga nya egenskapsvärden i den befintliga entiteten. Om det inte finns någon entitet infogas en ny.

Exemplet nedan visar hur en entitet uppdateras med hjälp av update_entity():

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

Med update_entity() och merge_entity(), om entiteten som du uppdaterar inte finns, misslyckas uppdateringsåtgärden. Om du vill lagra en entitet oavsett om den redan finns eller inte bör du därför använda insert_or_replace_entity() eller insert_or_merge_entity() i stället.

Arbeta med grupper av entiteter

Ibland är det praktiskt att skicka flera åtgärder tillsammans i en batch för att säkerställa atomisk bearbetning av servern. För att åstadkomma det skapar du först ett Batch-objekt och använder sedan metoden execute_batch() i TableService. Exemplet nedan visar hur du skickar två entiteter med RowKey 2 och 3 i en batch. Observera att detta endast fungerar för entiteter med samma 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)

Fråga efter en entitet

Om du vill fråga efter en entitet i en tabell använder du metoden get_entity() genom att skicka tabellnamnet, PartitionKey och RowKey.

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

Fråga efter en uppsättning entiteter

Om du vill fråga efter en uppsättning enheter i en tabell skapar du ett hash-objekt för frågan och använder metoden query_entities(). Exemplet nedan visar hur du hämtar alla entiteter med samma PartitionKey:

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

Anteckning

Om resultatuppsättningen är för stor och en enskild fråga inte kan returnera hela uppsättningen returneras en fortsättningstoken som du kan använda för att hämta de efterföljande sidorna.

Fråga en deluppsättning entitetsegenskaper

En fråga till en tabell kan bara hämta några få egenskaper från en entitet. Den här projektionstekniken minskar bandbredden och kan förbättra frågeprestanda, särskilt för stora entiteter. Använd select-satsen och ange namnen på de egenskaper som du vill skicka till klienten.

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

Ta bort en entitet

Om du vill ta bort en entitet använder du metoden delete_entity(). Ange namnet på tabellen som innehåller entiteten, samt PartitionKey och RowKey för entiteten.

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

Ta bort en tabell

Om du vill ta bort en tabell använder du metoden delete_table() och anger namnet på den tabell som du vill ta bort.

azure_table_service.delete_table("testtable")