Compartir a través de


Uso de Azure Table Storage y Azure Cosmos DB for Table con Ruby

SE APLICA A: Tabla

Advertencia

Este proyecto está en la fase de soporte técnico de la comunidad de su ciclo de vida. Finalmente, todas las bibliotecas cliente asociadas se retirarán permanentemente. Para más información sobre la retirada y las alternativas al uso de este proyecto, consulte Aviso de retirada: Bibliotecas de cliente PHP de Azure Storage.

Sugerencia

El contenido de este artículo se aplica a Azure Table Storage y Azure Cosmos DB para Table. La API para Table es una oferta premium para Table Storage que ofrece tablas optimizadas para el rendimiento, distribución global e índices secundarios automáticos.

En este artículo se muestra cómo crear tablas, y almacenar los datos y realizar operaciones CRUD en ellos. Elija usar el servicio Azure Table Storage o Azure Cosmos DB for Table. Los ejemplos de este artículo están escritos en Ruby y usan la biblioteca de cliente de Azure Storage Table para Ruby. Entre los escenarios se incluyen la creación de una tabla, la eliminación de una tabla, la inserción de entidades y la consulta de entidades de la tabla.

Creación de una cuenta de servicio de Azure

Puede trabajar con tablas mediante Azure Table Storage o Azure Cosmos DB. Para obtener más información sobre las diferencias entre las ofertas de tablas de estos dos servicios, consulte la introducción a API para Table. Debe crear una cuenta para el servicio que va a usar. En las secciones siguientes se muestra cómo crear las cuentas de Azure Table Storage y Azure Cosmos DB, pero solo puede usar una de ellas.

Azure Table Storage

La manera más sencilla de crear una cuenta de almacenamiento de Azure es mediante Azure Portal. Para obtener más información, consulte Crear una cuenta de almacenamiento.

También se puede crear una cuenta de Azure Storage mediante Azure PowerShell o la CLI de Azure.

Si prefiere no crear una cuenta de almacenamiento en este momento, también puede utilizar el emulador de Azure Storage para ejecutar y probar el código en un entorno local. Para más información, consulte Uso del emulador de Azure Storage para desarrollo y pruebas.

Azure Cosmos DB for Table

Para obtener instrucciones sobre cómo crear una cuenta de Azure Cosmos DB for Table, consulte Creación de una cuenta de base de datos.

Incorporación de acceso a Azure Storage o Azure Cosmos DB

Para usar Azure Storage o Azure Cosmos DB, descargue y use el paquete de Ruby Azure. Este paquete incluye un conjunto de bibliotecas útiles que se comunican con los servicios REST de tabla.

Uso de RubyGems para obtener el paquete

  1. Use una interfaz de línea de comandos como PowerShell (Windows), Terminal (Mac) o Bash (Unix).
  2. Escriba gem install azure-storage-table en la ventana de comandos para instalar la gema y las dependencias.

Importación del paquete

Con el editor de texto que prefiera, agregue lo siguiente al principio del archivo de Ruby en el que pretenda utilizar el almacenamiento:

require "azure/storage/table"

Incorporación de la cadena de conexión

Puede conectarse a la cuenta de Azure Storage o Azure Cosmos DB for Table. Obtenga el cadena de conexión en función del tipo de cuenta que usa.

Incorporación de una conexión de Azure Storage

El módulo de Azure Storage lee las variables de entorno AZURE_STORAGE_ACCOUNT y AZURE_STORAGE_ACCESS_KEY para la información necesaria para conectarse a su cuenta de Azure Storage. Si no se establecen estas variables de entorno, debe especificar la información de la cuenta antes de usar Azure::Storage::Table::TableService con el código siguiente:

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

Para obtener estos valores desde una cuenta de almacenamiento de Azure Resource Manager o clásica en el Portal de Azure:

  1. Inicie sesión en el Portal de Azure.
  2. Vaya a la cuenta de almacenamiento que desea usar.
  3. En la página Configuración, seleccione Claves de acceso.
  4. En la página Claves de acceso, observe la clave de acceso 1 y la clave de acceso 2. Puede usar cualquiera de estas claves.
  5. Seleccione el icono de copiar para copiar la clave en el Portapapeles.

Adición de una conexión de Azure Cosmos DB

Para conectarse a Azure Cosmos DB, copie la cadena de conexión principal de Azure Portal y cree un objeto Client con la cadena de conexión que ha copiado. Puede pasar el objeto Client cuando crea un objeto 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)

Creación de una tabla

El objeto Azure::Storage::Table::TableService permite trabajar con tablas y entidades. Para crear una tabla, use el método create_table() . En el ejemplo siguiente se crea una tabla o se imprime el error si hay alguno.

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

Adición de una entidad a una tabla

Para agregar una entidad, primero cree un objeto hash que defina las propiedades de la entidad. Para cada entidad, debe especificar partitionKey y RowKey. Estas entidades son los identificadores únicos de las entidades y son valores que se pueden consultar más rápido que las demás propiedades. Azure Storage usa PartitionKey para distribuir automáticamente las entidades de la tabla entre varios nodos de almacenamiento. Las entidades con la misma PartitionKey se almacenan en el mismo nodo. La RowKey es el identificador exclusivo de la entidad de la partición a la que pertenece.

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

Actualización de una entidad

Hay varios métodos para actualizar una entidad existente:

Descripción
update_entity() actualiza una entidad existente al reemplazarla.
merge_entity() actualiza una entidad que ya existe combinando los valores de las nuevas propiedades con la entidad existente.
insert_or_merge_entity() actualiza una entidad existente al reemplazarla. Si no existe ninguna entidad, se inserta una nueva.
insert_or_replace_entity() actualiza una entidad que ya existe combinando los valores de las nuevas propiedades con la entidad existente. Si no existe ninguna entidad, se inserta una nueva.

En el ejemplo siguiente se demuestra cómo actualizar una entidad usando 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() y merge_entity(), si la entidad que está actualizando no existe, se produce un error en la operación de actualización. Por lo tanto, si desea almacenar una entidad independientemente de la que ya existe, debe usar insert_or_replace_entity() o insert_or_merge_entity() .

Trabajo con grupos de entidades

A veces resulta útil enviar varias operaciones juntas en un lote a fin de garantizar el procesamiento atómico por parte del servidor. Para ello, primero debe crear un objeto Batch y, a continuación, usar el método execute_batch() en TableService. El siguiente ejemplo muestra el envío de dos entidades con RowKey 2 y 3 en un lote. Tenga en cuenta que solo funciona para entidades con el mismo valor de 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)

Consulta de una entidad

Para consultar una entidad de una tabla, use el método get_entity() , pasando el nombre de la tabla, PartitionKey y RowKey.

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

Consulta de un conjunto de entidades

Para realizar una consulta de un conjunto de entidades de una tabla, cree un objeto hash de consulta y use el método query_entities() . El siguiente ejemplo muestra la obtención de todas las entidades con el mismo valor de PartitionKey:

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

Nota

Si el resultado establecido es demasiado largo para que lo devuelva una única consulta, se devuelve un token de continuación que puede usar para recuperar las páginas siguientes.

Consulta de un subconjunto de propiedades de las entidades

Una consulta de tabla puede recuperar solo algunas propiedades de una entidad. Esta técnica de "proyección" reduce el ancho de banda y puede mejorar el rendimiento de las consultas, especialmente para entidades grandes. Utilice la cláusula select y pase los nombres de las propiedades que quiera que lleguen al cliente.

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

Eliminación de una entidad

Para eliminar una entidad, use el método delete_entity() . Pase el nombre de la tabla que contiene la entidad, la PartitionKey y la RowKey de la entidad.

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

Eliminar una tabla

Para eliminar una tabla, use el método delete_table() y pase el nombre de la tabla que desea eliminar.

azure_table_service.delete_table("testtable")