How to use Azure Table Storage and the Azure Cosmos DB for Table with Ruby

DOTYCZY: Tabela

Ostrzeżenie

Ten projekt znajduje się na etapie wsparcia społeczności w cyklu życia. Ostatecznie wszystkie skojarzone biblioteki klienckie zostaną trwale wycofane. Aby uzyskać więcej informacji na temat wycofywania i alternatyw dla korzystania z tego projektu, zobacz Powiadomienie o wycofaniu: Biblioteki klienta PHP usługi Azure Storage.

Porada

Zawartość tego artykułu dotyczy usług Azure Table Storage i Azure Cosmos DB dla tabel. Interfejs API dla tabel to oferta Premium dla magazynu tabel, która oferuje tabele zoptymalizowane pod kątem przepływności, dystrybucję globalną i automatyczne indeksy pomocnicze.

W tym artykule pokazano, jak tworzyć tabele, przechowywać dane i wykonywać operacje CRUD na danych. Wybierz usługę Azure Table Service lub usługę Azure Cosmos DB dla tabeli. Przykłady opisane w tym artykule zostały napisane w języku Ruby i korzystają z biblioteki klienta tabel usługi Azure Storage dla języka Ruby. Omówione scenariusze obejmują tworzenie tabeli, usuwanie tabeli, wstawianie jednostek i wykonywanie zapytań względem jednostek z tabeli.

Tworzenie konta usługi platformy Azure

Możesz pracować z tabelami przy użyciu usługi Azure Table Storage lub usługi Azure Cosmos DB. Aby dowiedzieć się więcej o różnicach między ofertami tabel w tych dwóch usługach, zobacz omówienie interfejsu API dla tabel. Musisz utworzyć konto dla usługi, której będziesz używać. W poniższych sekcjach pokazano, jak utworzyć zarówno usługę Azure Table Storage, jak i konto usługi Azure Cosmos DB, jednak możesz po prostu użyć jednego z nich.

Azure Table Storage

Najprostszym sposobem utworzenia konta usługi Azure Storage jest użycie Azure Portal. Więcej informacji można znaleźć w temacie Tworzenie konta magazynu.

Możesz utworzyć konto usługi Azure Storage przy użyciu programu Azure PowerShell lub interfejsu wiersza polecenia platformy Azure.

Jeśli w tej chwili nie chcesz tworzyć konta magazynu, możesz również użyć emulatora usługi Azure Storage do uruchomienia i przetestowania kodu w środowisku lokalnym. Aby uzyskać więcej informacji, zobacz Use the Azure Storage Emulator for development and testing (Używanie emulatora usługi Azure Storage do programowania i testowania).

Usługa Azure Cosmos DB dla tabeli

Aby uzyskać instrukcje dotyczące tworzenia konta usługi Azure Cosmos DB dla tabel, zobacz Tworzenie konta bazy danych.

Dodawanie dostępu do usługi Azure Storage lub Azure Cosmos DB

Aby użyć usługi Azure Storage lub Azure Cosmos DB, pobierz pakiet platformy Azure w języku Ruby i użyj go. Ten pakiet zawiera zestaw bibliotek spożywczych, które komunikują się z usługami REST tabel.

Używanie narzędzia RubyGems do pobierania pakietu

  1. Użyj interfejsu wiersza polecenia, takiego jak PowerShell (system Windows), Terminal (system Mac) lub Bash (system Unix).
  2. Wpisz polecenie gem install azure-storage-table w oknie polecenia, aby zainstalować rozwiązanie gem i zależności.

Importowanie pakietu

Użyj swojego ulubionego edytora tekstu, aby dodać następujący element na początku pliku w języku Ruby, w którym planujesz użyć usługi Storage:

require "azure/storage/table"

Dodawanie parametry połączenia

Możesz nawiązać połączenie z kontem usługi Azure Storage lub kontem usługi Azure Cosmos DB dla tabeli. Pobierz parametry połączenia na podstawie typu używanego konta.

Dodawanie połączenia z usługą Azure Storage

Moduł usługi Azure Storage odczytuje zmienne środowiskowe AZURE_STORAGE_ACCOUNT i AZURE_STORAGE_ACCESS_KEY, aby uzyskać informacje wymagane do nawiązania połączenia z kontem usługi Azure Storage. Jeśli te zmienne środowiskowe nie są ustawione, musisz określić informacje o koncie przed użyciem usługi Azure::Storage::Table::TableService przy użyciu następującego kodu:

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

Aby uzyskać te wartości z klasycznego konta magazynu lub konta magazynu menedżera zasobów w witrynie Azure Portal:

  1. Zaloguj się w witrynie Azure Portal.
  2. Przejdź do konta magazynu, którego chcesz użyć.
  3. Na stronie Ustawienia wybierz pozycję Klucze dostępu.
  4. Na stronie Klucze dostępu obserwuj klucz dostępu 1 i klucz dostępu 2. Możesz użyć jednego z tych kluczy.
  5. Wybierz ikonę kopiowania, aby skopiować klucz do schowka.

Dodawanie połączenia z usługą Azure Cosmos DB

Aby nawiązać połączenie z usługą Azure Cosmos DB, skopiuj podstawowe parametry połączenia z witryny Azure Portal, a następnie utwórz obiekt Client za ich pomocą. Możesz przekazać obiekt Client podczas tworzenia obiektu 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)

Tworzenie tabeli

Obiekt Azure::Storage::Table::TableService umożliwia pracę z tabelami i jednostkami. Aby utworzyć tabelę, użyj metody create_table(). Poniższy przykład tworzy tabelę lub wyświetla błąd, jeśli istnieje.

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

Dodawanie jednostki do tabeli

Aby dodać jednostkę, najpierw utwórz obiekt skrótu, który definiuje właściwości jednostki. Dla każdej jednostki należy określić wartości PartitionKey i RowKey. Te jednostki są unikatowymi identyfikatorami jednostek i są wartościami, które mogą być odpytywane szybciej niż inne właściwości. Usługa Azure Storage używa właściwości PartitionKey do automatycznego dystrybuowania jednostek tabeli w wielu węzłach magazynu. Obiekty z tą samą wartością właściwości PartitionKey są przechowywane w tym samym węźle. Właściwość RowKey to unikatowy identyfikator jednostki w ramach partycji, do której należy.

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

Aktualizowanie jednostki

Istnieje kilka metod aktualizowania istniejącej jednostki:

Opis
update_entity() Aktualizuje istniejącą jednostkę przez jej zastąpienie.
merge_entity() Aktualizuje istniejącą jednostkę przez scalenie nowych wartości właściwości z istniejącą jednostką.
insert_or_merge_entity() Aktualizuje istniejącą jednostkę przez jej zastąpienie. Jeśli żadna jednostka nie istnieje, zostanie wstawiona nowa jednostka.
insert_or_replace_entity() Aktualizuje istniejącą jednostkę przez scalenie nowych wartości właściwości z istniejącą jednostką. Jeśli żadna jednostka nie istnieje, zostanie wstawiona nowa jednostka.

W poniższym przykładzie przedstawiono aktualizowanie jednostki przy użyciu metody update_entity():

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

W przypadku update_entity() i merge_entity(), jeśli aktualizowana jednostka nie istnieje, operacja aktualizacji zakończy się niepowodzeniem. W związku z tym jeśli chcesz przechowywać jednostki niezależnie od tego, czy już istnieją, należy zamiast tego użyć metody insert_or_replace_entity() lub insert_or_merge_entity().

Praca z grupami jednostek

Czasami warto przesłać jednocześnie wiele operacji w partii, aby zapewnić niepodzielne przetwarzanie przez serwer. Aby to osiągnąć, należy najpierw utworzyć obiekt Batch, a następnie użyć metody execute_batch() względem obiektu TableService. W poniższym przykładzie przedstawiono przesyłanie dwóch jednostek w partii z właściwością RowKey o wartościach 2 i 3. Należy zauważyć, że działa to tylko dla jednostek o tej samej wartości właściwości 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)

Wykonywanie zapytania względem jednostki

Aby wykonać zapytanie względem jednostki w tabeli, użyj metody get_entity(), przekazując nazwę tabeli oraz właściwości PartitionKey i RowKey.

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

Wykonywanie zapytania względem zestawu jednostek

Aby wykonać zapytanie względem zestawu jednostek, utwórz obiekt skrótu zapytania, a następnie użyj metody query_entities(). W poniższym przykładzie przedstawiono pobieranie wszystkich jednostek o takiej samej wartości właściwości PartitionKey:

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

Uwaga

Jeśli zestaw wyników jest zbyt duży do zwrócenia w ramach pojedynczego zapytania, zwracany jest token kontynuacji, którego można użyć do pobrania kolejnych stron.

Tworzenie zapytania do podzbioru właściwości jednostki

Za pomocą zapytania wykonywanego względem tabeli można pobrać tylko kilka właściwości z jednostki. Ta technika "projekcji" zmniejsza przepustowość i może zwiększyć wydajność zapytań, szczególnie w przypadku dużych jednostek. Użyj klauzuli SELECT i wprowadź nazwy właściwości, które chcesz przekazać do klienta.

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

Usuwanie jednostki

Aby usunąć jednostkę, użyj metody delete_entity(). Przekaż nazwę tabeli zawierającą jednostkę oraz właściwości PartitionKey i RowKey jednostki.

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

Usuwanie tabeli

Aby usunąć tabelę, użyj metody delete_table() i przekaż nazwę tabeli, którą chcesz usunąć.

azure_table_service.delete_table("testtable")