Использование хранилища таблиц Azure и Azure Cosmos DB для таблиц с Ruby
ОБЛАСТЬ ПРИМЕНЕНИЯ: Таблица
Предупреждение
Этот проект находится на этапе поддержки сообщества в его жизненном цикле. В конечном итоге все связанные клиентские библиотеки будут выведены из эксплуатации окончательно. Дополнительные сведения о прекращении поддержки и альтернативах использованию этого проекта см. в статье Уведомление о прекращении поддержки: клиентские библиотеки PHP службы хранилища Azure.
Совет
Содержимое этой статьи относится к хранилищу таблиц Azure и Azure Cosmos DB для таблиц. API для таблиц — это предложение уровня "Премиум" для хранилища таблиц, которое предлагает оптимизированные для пропускной способности таблицы, глобальное распределение и автоматические вторичные индексы.
В этой статье показано, как создавать таблицы, сохранять данные и выполнять операции CRUD с данными. Выберите службу таблиц Azure или Azure Cosmos DB для таблицы. В приведенных в этой статье примерах, написанных на Ruby, используется клиентская библиотека таблиц службы хранилища Azure для Ruby. Рассматриваемые сценарии включают в себя создание таблицы, удаление таблицы, вставку сущностей и запрос сущностей из таблицы.
Создание учетной записи службы Azure
Вы можете работать с таблицами, используя хранилище таблиц Azure или Azure Cosmos DB. Дополнительные сведения о различиях между предложениями таблиц в этих двух службах см. в статье Общие сведения об API для таблиц. Необходимо создать учетную запись для службы, которую вы собираетесь использовать. В следующих разделах показано, как создать и хранилище таблиц Azure, и учетную запись Azure Cosmos DB, однако можно использовать что-то одно.
Хранилище таблиц Azure
Самый простой способ создать учетную запись хранения Azure — воспользоваться порталом Azure. Дополнительную информацию см. в статье Об учетных записях хранения Azure.
Учетную запись хранения Azure можно создать также с помощью Azure PowerShell или Azure CLI.
Если вы не хотите сейчас создавать учетную запись хранения, код можно запустить и протестировать в локальной среде с помощью эмулятора хранения Azure. Дополнительные сведения см. в статье Использование Эмулятора службы хранилища Azure для разработки и тестирования.
Azure Cosmos DB for Table
Инструкции по созданию учетной записи Azure Cosmos DB для таблицы см. в статье Создание учетной записи базы данных.
Добавление доступа к службе хранилища Azure или Azure Cosmos DB
Чтобы использовать службу хранилища Azure или Azure Cosmos DB, скачайте и используйте пакет Azure Ruby. Этот пакет включает набор удобных библиотек, взаимодействующих со службами REST таблиц.
Использование RubyGems для получения пакета
- Используйте интерфейс командной строки, например PowerShell (Windows), Terminal (Mac) или Bash (Unix).
- Введите gem install azure-storage-table в окне командной строки, чтобы установить пакет gem и зависимости.
Импорт пакета
С помощью любого текстового редактора добавьте указанный код в начало файла Ruby, где планируется использовать службу хранилища.
require "azure/storage/table"
Добавление строки подключения
Вы можете подключиться либо к учетной записи хранения Azure, либо к учетной записи Azure Cosmos DB для таблицы. Получите строка подключения в зависимости от типа используемой учетной записи.
Добавление подключения к службе хранилища Azure
Модуль службы хранилища Azure считывает переменные среды AZURE_STORAGE_ACCOUNT и AZURE_STORAGE_ACCESS_KEY, чтобы получить информацию, необходимую для подключения к учетной записи хранения Azure. Если эти переменные среды не заданы, необходимо указать сведения об учетной записи перед использованием Azure::Storage::TableService со следующим кодом:
Azure.config.storage_account_name = "<your Azure Storage account>"
Azure.config.storage_access_key = "<your Azure Storage access key>"
Вот как можно получить эти значения из классический учетной записи хранения или учетной записи хранения Resource Manager на портале Azure.
- Войдите на портал Azure.
- Перейдите к учетной записи хранения, которая будет использоваться.
- На странице Параметры выберите Ключи доступа.
- На странице Ключи доступа просмотрите ключи доступа 1 и ключ доступа 2. Вы можете использовать любой из этих ключей.
- Щелкните значок копирования, чтобы скопировать ключ в буфер обмена.
Добавление подключения к Azure Cosmos DB
Чтобы подключиться к Azure Cosmos DB, скопируйте первичную строку подключения c портала Azure и с ее помощью создайте объект Client. Объект Client можно передать при создании объекта 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)
Создание таблицы
Объект Azure::Storage::Table::TableService позволяет работать с таблицами и сущностями. Чтобы создать таблицу, используйте метод create_table() . В следующем примере создается таблица или выводится ошибка, если она есть.
azure_table_service = Azure::Storage::Table::TableService.new
begin
azure_table_service.create_table("testtable")
rescue
puts $!
end
Добавление сущности в таблицу
Чтобы добавить сущность, сначала создайте хэш-объект, который определяет свойства сущности. Для каждой сущности необходимо указать PartitionKey и RowKey. Эти сущности являются уникальными идентификаторами сущностей и представляют собой значения, которые можно запрашивать быстрее, чем другие свойства. Служба хранилища Azure использует PartitionKey , чтобы автоматически распространять сущности таблицы на множество узлов хранилища. Сущности с одним значением PartitionKey хранятся на одном узле. RowKey — это уникальный идентификатор сущности в разделе, которому она принадлежит.
entity = { "content" => "test entity",
:PartitionKey => "test-partition-key", :RowKey => "1" }
azure_table_service.insert_entity("testtable", entity)
Обновление сущности
Для обновления имеющейся сущности доступно несколько методов:
Описание | |
---|---|
update_entity() |
обновляет имеющуюся сущность путем ее замены. |
merge_entity() |
обновляет сущность посредством объединения новых значений свойств с имеющейся сущностью. |
insert_or_merge_entity() |
обновляет имеющуюся сущность путем ее замены. Если сущности не существует, вставляется новая. |
insert_or_replace_entity() |
обновляет сущность посредством объединения новых значений свойств с имеющейся сущностью. Если сущности не существует, вставляется новая. |
В следующем примере показано обновление сущности с помощью метода update_entity() .
entity = { "content" => "test entity with updated content",
:PartitionKey => "test-partition-key", :RowKey => "1" }
azure_table_service.update_entity("testtable", entity)
При использовании update_entity() и merge_entity(), если обновляемая сущность не существует, операция обновления завершается ошибкой. Поэтому, если вы хотите сохранить сущность независимо от того, существует она или нет, используйте метод insert_or_replace_entity() или insert_or_merge_entity() .
Работа с группами сущностей
Иногда имеет смысл отправлять совместно несколько операций в пакете для атомарной обработки сервером. Для этого сначала требуется создать объект Batch, а затем использовать метод execute_batch() для TableService. В следующем примере показана отправка двух сущностей с RowKey 2 и 3 в пакете. Обратите внимание, что пример работает только для сущностей с одинаковым значением 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)
Запрос сущности
Чтобы отправить запрос к сущности в таблице, используйте метод get_entity() : передайте имя таблицы, PartitionKey и RowKey.
result = azure_table_service.get_entity("testtable", "test-partition-key",
"1")
Запрос набора сущностей
Чтобы отправить запрос к набору сущностей в таблице, создайте хэш-объект запроса и используйте метод query_entities() . В следующем примере показано, как получить все сущности с одним значением PartitionKey:
query = { :filter => "PartitionKey eq 'test-partition-key'" }
result, token = azure_table_service.query_entities("testtable", query)
Примечание
Если полученный в результате набор слишком велик и не может быть возвращен в одном запросе, возвращается маркер продолжения, который можно использовать для извлечения последующих страниц.
Запрос подмножества свойств сущности
Запрос к таблице может получить лишь несколько свойств сущности. Этот метод "проекции" снижает пропускную способность и может повысить производительность запросов, особенно для крупных сущностей. Используйте предложение select и передайте имена свойств, которые необходимо передать клиенту.
query = { :filter => "PartitionKey eq 'test-partition-key'",
:select => ["content"] }
result, token = azure_table_service.query_entities("testtable", query)
Удаление сущности
Чтобы удалить сущность, используйте метод delete_entity() . Передайте имя таблицы, содержащей сущность, а также свойства PartitionKey и RowKey сущности.
azure_table_service.delete_entity("testtable", "test-partition-key", "1")
Удаление таблицы
Чтобы удалить таблицу, используйте метод delete_table() и передайте имя удаляемой таблицы.
azure_table_service.delete_table("testtable")
См. также
- Обозреватель хранилищ Microsoft Azure — это бесплатное автономное приложение от корпорации Майкрософт, позволяющее визуализировать данные из службы хранилища Azure на платформе Windows, macOS и Linux.
- Центр разработчиков для Ruby
- Клиентская библиотека таблиц службы хранилища Microsoft Azure для Ruby