Come usare Archiviazione tabelle di Azure e Azure Cosmos DB per Table con Ruby

SI APPLICA A: Tabella

Avviso

Questo progetto si trova nella fase di supporto della community del ciclo di vita. Alla fine, tutte le librerie client associate verranno ritirati definitivamente. Per altre informazioni sul ritiro e sulle alternative all'uso di questo progetto, vedere Avviso di ritiro: librerie client PHP di Archiviazione di Azure.

Suggerimento

Il contenuto di questo articolo si applica all'archiviazione tabelle di Azure e ad Azure Cosmos DB per tabella. L'API per Table è un'offerta Premium per l'archiviazione tabelle che offre tabelle ottimizzate per la velocità effettiva, la distribuzione globale e gli indici secondari automatici.

Questo articolo illustra come creare tabelle, archiviare i dati ed eseguire operazioni CRUD sui dati. Scegliere il servizio tabelle di Azure o Azure Cosmos DB per tabella. Gli esempi descritti in questo articolo sono scritti in Ruby e usano la libreria client delle tabelle di Archiviazione di Azure per Ruby. Gli scenari trattati includono: creare una tabella, eliminare una tabella, inserire entità ed eseguire query sulle entità dalla tabella.

Creare un account del servizio di Azure

È possibile usare le tabelle con l'archiviazione tabelle di Azure o con Azure Cosmos DB. Per altre informazioni sulle differenze tra le offerte di tabelle in questi due servizi, vedere la panoramica dell'API per la tabella. È necessario creare un account per il servizio che verrà usato. Le sezioni seguenti illustrano come creare sia l'archiviazione tabelle di Azure che l'account Azure Cosmos DB, tuttavia è possibile scegliere tra uno dei due.

Archiviazione tabelle di Azure

Il modo più semplice per creare un account di archiviazione di Azure consiste nell'usare il portale di Azure. Per altre informazioni, vedere Creare un account di archiviazione.

È possibile anche creare un account di archiviazione di Azure usando Azure PowerShell o l'interfaccia della riga di comando di Azure.

Se si preferisce non creare un account di archiviazione in questa fase, è anche possibile usare l'emulatore di archiviazione di Azure per eseguire e testare il codice in un ambiente locale. Per altre informazioni, vedere Usare l'emulatore di archiviazione di Azure per sviluppo e test.

Azure Cosmos DB for Table

Per istruzioni sulla creazione di un account Azure Cosmos DB per tabella, vedere Creare un account di database.

Aggiungere l'accesso ad Archiviazione di Azure o ad Azure Cosmos DB

Per usare Archiviazione di Azure o Azure Cosmos DB, scaricare e usare il pacchetto Ruby Azure. Questo pacchetto include un set di librerie pratici che comunicano con i servizi REST tabella.

Utilizzare RubyGems per ottenere il pacchetto

  1. Usare un'interfaccia della riga di comando, ad esempio PowerShell (Windows), Terminal (Mac) o Bash (Unix).
  2. Digitare gem install azure-storage-table nella finestra di comando per installare la gemma e le dipendenze.

Importare il pacchetto

Usando l'editor di testo preferito aggiungere quanto segue alla parte superiore del file Ruby dove si intende usare l'archiviazione:

require "azure/storage/table"

Aggiungere la stringa di connessione

È possibile connettersi all'account di archiviazione di Azure o all'account Azure Cosmos DB per tabella. Ottenere la stringa di connessione in base al tipo di account in uso.

Aggiungere una connessione ad Archiviazione di Azure

I modulo di Archiviazione di Azure legge le variabili di ambiente AZURE_STORAGE_ACCOUNT e AZURE_STORAGE_ACCESS_KEY per ottenere le informazioni necessarie per la connessione all'account di archiviazione di Azure. Se queste variabili di ambiente non sono impostate, è necessario specificare le informazioni sull'account prima di usare Azure::Storage::Table::TableService con il codice seguente:

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

Per ottenere questi valori da un account di archiviazione classico o di Resource Manager nel portale di Azure:

  1. Accedere al portale di Azure.
  2. Passare all'account di archiviazione che si vuole usare.
  3. Nella pagina Impostazioni selezionare Chiavi di accesso.
  4. Nella pagina Chiavi di accesso osservare la chiave di accesso 1 e la chiave di accesso 2. È possibile usare una di queste chiavi.
  5. Selezionare l'icona di copia per copiare la chiave negli Appunti.

Aggiungere una connessione ad Azure Cosmos DB

Per connettersi ad Azure Cosmos DB, copiare la stringa di connessione primaria dal portale di Azure e creare un oggetto Client usando la stringa di connessione copiata. È possibile passare l'oggetto Client quando si crea un oggetto TableService:

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)

Creare una tabella

L'oggetto Azure::Storage::Table::TableService consente di usare tabelle ed entità. Per creare una tabella, usare il metodo create_table() . L'esempio seguente crea una tabella o stampa l'errore se presente.

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

Aggiungere un'entità a una tabella

Per aggiungere un'entità, creare innanzitutto un oggetto hash che definisca le proprietà dell'entità. Per ogni entità, è necessario specificare un valore PartitionKey e RowKey. Queste entità sono gli identificatori univoci delle entità e sono valori che possono essere sottoposti a query più velocemente rispetto alle altre proprietà. Archiviazione Azure utilizza PartitionKey per distribuire automaticamente le entità della tabella su molti nodi di archiviazione. Le entità con lo stesso oggetto PartitionKey vengono archiviate nello stesso nodo. RowKey è l'ID univoco dell'entità all'interno della partizione cui appartiene.

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

Aggiornare un'entità

Esistono vari metodi per aggiornare un'entità esistente:

Descrizione
update_entity() aggiorna un'entità esistente sostituendola.
merge_entity() aggiorna un'entità esistente unendovi nuovi valori delle proprietà.
insert_or_merge_entity() aggiorna un'entità esistente sostituendola. Se non esiste alcuna entità, viene inserita una nuova entità.
insert_or_replace_entity() aggiorna un'entità esistente unendovi nuovi valori delle proprietà. Se non esiste alcuna entità, viene inserita una nuova entità.

L'esempio seguente illustra l'aggiornamento di un'entità mediante update_entity() :

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

Con update_entity() e merge_entity(), se l'entità che si sta aggiornando non esiste, l'operazione di aggiornamento ha esito negativo. Se pertanto si vuole archiviare un'entità indipendentemente dal fatto che esista o meno, è necessario usare insert_or_replace_entity() o insert_or_merge_entity() .

Usare i gruppi di entità

È talvolta consigliabile inviare più operazioni in un batch per garantire l'elaborazione atomica da parte del server. A tale scopo, è necessario prima creare un oggetto Batch e quindi usare il metodo execute_batch() su TableService. Nell'esempio seguente viene dimostrato l'invio di due entità con RowKey 2 e 3 in un batch: Si noti che funziona solo per le entità con lo stesso oggetto 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)

Eseguire una query su un'entità

Per eseguire una query su un'entità in una tabella, usare il metodo get_entity() passando il nome della tabella e i parametri PartitionKey e RowKey.

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

Eseguire query su un set di entità

Per eseguire query su un set di entità in una tabella, creare un oggetto hash di query e usare il metodo query_entities() . Nell'esempio seguente viene dimostrato l'invio di tutte le entità con lo stesso oggetto PartitionKey:

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

Nota

Se il set di risultati è troppo grande per essere restituito da un'unica query, viene restituito un token di continuazione per recuperare le pagine successive.

Eseguire query su un subset di proprietà di entità

Mediante una query su una tabella è possibile recuperare solo alcune proprietà da un'entità. Questa tecnica di "proiezione" riduce la larghezza di banda e può migliorare le prestazioni delle query, soprattutto per le entità di grandi dimensioni. Utilizzare la clausola select e passare i nomi delle proprietà da inoltrare al client.

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

Eliminare un'entità

Per eliminare un'entità, usare il metodo delete_entity() . Passare il nome della tabella che contiene l'entità e i parametri PartitionKey e RowKey dell'entità.

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

Eliminare una tabella

Per eliminare una tabella, usare il metodo delete_table() e passare il nome della tabella che si vuole eliminare.

azure_table_service.delete_table("testtable")