Jak používat Azure Table Storage a Azure Cosmos DB pro table s Ruby

PLATÍ PRO: Tabulka

Upozornění

Tento projekt je v rámci životního cyklu ve fázi podpory komunity . Nakonec budou všechny přidružené klientské knihovny trvale vyřazeny. Další informace o vyřazení z provozu a alternativách k použití tohoto projektu najdete v tématu Oznámení o vyřazení: Klientské knihovny PHP služby Azure Storage.

Tip

Obsah v tomto článku platí pro Azure Table Storage a Azure Cosmos DB for Table. Rozhraní API pro tabulky je prémiová nabídka pro table Storage, která nabízí tabulky optimalizované pro propustnost, globální distribuci a automatické sekundární indexy.

V tomto článku se dozvíte, jak vytvářet tabulky, ukládat data a provádět operace CRUD s daty. Zvolte službu Azure Table service nebo Azure Cosmos DB for Table. Ukázky popsané v tomto článku jsou napsané v Ruby a používají klientskou knihovnu Azure Storage Table Client Library pro Ruby. Popsané scénáře zahrnují vytvoření tabulky, odstranění tabulky, vložení entit a dotazování entit z tabulky.

Vytvoření účtu služby Azure

S tabulkami můžete pracovat pomocí služby Azure Table Storage nebo Azure Cosmos DB. Další informace o rozdílech mezi nabídkami tabulek v těchto dvou službách najdete v tématu Přehled rozhraní API pro tabulky. Musíte vytvořit účet pro službu, kterou budete používat. Následující části ukazují, jak vytvořit azure Table Storage i účet Azure Cosmos DB, ale můžete použít jenom jeden z nich.

Azure Table Storage

Nejjednodušší způsob, jak vytvořit účet úložiště Azure, je použít Azure Portal. Další informace najdete v tématu Vytvoření účtu úložiště.

Účet úložiště Azure můžete vytvořit také pomocí Azure PowerShellu nebo Azure CLI.

Pokud v tuto chvíli nechcete účet úložiště vytvářet, můžete také pomocí emulátoru úložiště Azure spouštět a testovat kód v místním prostředí. Další informace najdete v tématu Použití emulátoru úložiště Azure pro vývoj a testování.

Azure Cosmos DB pro tabulku

Pokyny k vytvoření účtu Služby Azure Cosmos DB pro tabulku najdete v tématu Vytvoření databázového účtu.

Přidání přístupu ke službě Azure Storage nebo Azure Cosmos DB

Pokud chcete používat Azure Storage nebo Azure Cosmos DB, stáhněte si a použijte balíček Azure Ruby. Tento balíček obsahuje sadu knihoven pro pohodlí, které komunikují se službami Table REST.

Získání balíčku pomocí RubyGems

  1. Použijte rozhraní příkazového řádku, jako je PowerShell (Windows), Terminál (Mac) nebo Bash (Unix).
  2. Zadáním příkazu gem install azure-storage-table do příkazového okna nainstalujte gem a závislosti.

Import balíčku

Pomocí oblíbeného textového editoru přidejte následující řádek na začátek souboru Ruby, ve kterém chcete službu Storage používat:

require "azure/storage/table"

Přidání připojovací řetězec

Můžete se připojit buď k účtu úložiště Azure, nebo k účtu Azure Cosmos DB for Table. Získejte připojovací řetězec podle typu účtu, který používáte.

Přidání připojení ke službě Azure Storage

Modul Azure Storage načte informace potřebné pro připojení k účtu služby Azure Storage z proměnných prostředí AZURE_STORAGE_ACCOUNT a AZURE_STORAGE_ACCESS_KEY. Pokud tyto proměnné prostředí nejsou nastavené, musíte před použitím Azure::Storage::Table::Table::TableService zadat informace o účtu s následujícím kódem:

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

Získání těchto hodnot z klasického účtu úložiště nebo účtu úložiště Resource Manageru na webu Azure Portal:

  1. Přihlaste se k webu Azure Portal.
  2. Přejděte do účtu služby Storage, který chcete použít.
  3. Na stránce Nastavení vyberte Přístupové klíče.
  4. Na stránce Přístupové klíče si prohlédněte přístupový klíč 1 a přístupový klíč 2. Můžete použít některý z těchto klíčů.
  5. Výběrem ikony kopírování zkopírujte klíč do schránky.

Přidání připojení ke službě Azure Cosmos DB

Pokud se chcete připojit ke službě Azure Cosmos DB, zkopírujte z webu Azure Portal primární připojovací řetězec a s jeho použitím vytvořte objekt Client. Objekt Client můžete předat při vytváření objektu 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)

Vytvoření tabulky

Objekt Azure::Storage::Table::TableService umožňuje pracovat s tabulkami a entitami. Pokud chcete vytvořit tabulku, použijte metodu create_table(). Následující příklad vytvoří tabulku nebo vypíše chybu, pokud nějaká existuje.

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

Přidání entity do tabulky

Pokud chcete přidat entitu, nejprve vytvořte objekt hash definující vlastnosti entity. Pro každou entitu musíte zadat PartitionKey a RowKey. Tyto entity jsou jedinečnými identifikátory entit a jedná se o hodnoty, na které je možné dotazovat rychleji než ostatní vlastnosti. Azure Storage používá PartitionKey k automatické distribuci entit tabulky do mnoha uzlů úložiště. Entity se stejnou hodnotou PartitionKey se ukládají na stejném uzlu. RowKey je jedinečné ID entity v rámci oddílu, do kterého patří.

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

Aktualizace entity

Existující entitu můžete aktualizovat několika metodami:

Description
update_entity() Aktualizujte existující entitu jejím nahrazením.
merge_entity() Aktualizace existující entitu sloučením nových hodnot vlastností do existující entity.
insert_or_merge_entity() Aktualizace existující entitu jejím nahrazením. Pokud žádná entita neexistuje, vloží se nová.
insert_or_replace_entity() Aktualizace existující entitu sloučením nových hodnot vlastností do existující entity. Pokud žádná entita neexistuje, vloží se nová.

Následující příklad ukazuje aktualizaci entity pomocí metody update_entity():

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

Pokud u update_entity() a merge_entity() neexistuje entita, kterou aktualizujete, operace aktualizace selže. Proto pokud chcete entitu uložit bez ohledu na to, jestli již existuje, měli byste místo toho použít metodu insert_or_replace_entity() nebo insert_or_merge_entity().

Práce se skupinami entit

Někdy má smysl odeslat více operací společně v dávce, aby se zajistilo jejich atomické zpracování serverem. Uděláte to tak, že nejprve vytvoříte objekt Batch a pak použijete metodu execute_batch() pro objekt TableService. Následující příklad ukazuje odeslání dvou entit s RowKey 2 a 3 v dávce. Poznámka: Tento přístup funguje pouze pro entity se stejnou hodnotou 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)

Dotaz na entitu

Pokud chcete zadat dotaz na entitu v tabulce, použijte metodu get_entity() a předejte do ní název tabulky, PartitionKey a RowKey.

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

Dotaz na sadu entit

Pokud chcete zadat dotaz na sadu entit v tabulce, vytvořte objekt hash dotazu a použijte metodu query_entities(). Následující příklad ukazuje získání všech entit se stejnou hodnotou PartitionKey:

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

Poznámka

Pokud je sada výsledků dotazu příliš velká na to, aby ji vrátil jeden dotaz, vrátí se token pro pokračování, pomocí kterého můžete načíst další stránky.

Dotaz na podmnožinu vlastností entity

Dotaz na tabulku dokáže z entity načíst pouze několik vlastností. Tato technika projekce snižuje šířku pásma a může zlepšit výkon dotazů, zejména u velkých entit. Použijte klauzuli select a předejte názvy vlastností, které chcete přenést do klienta.

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

Odstranění entity

Pokud chcete odstranit entitu, použijte metodu delete_entity(). Předejte do ní název tabulky, která entitu obsahuje, a PartitionKey a RowKey entity.

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

Odstranění tabulky

Pokud chcete odstranit tabulku, použijte metodu delete_table() a předejte do ní název tabulky, kterou chcete odstranit.

azure_table_service.delete_table("testtable")