Cómo administrar el almacenamiento de tablas de Microsoft Azure con Node.js
En este blog se explica cómo puede utilizar Node.js y Microsoft Azure Table Storage. Las soluciones de código abierto (OSS), son muy adecuadas para la implementación de aplicaciones independientes de la plataforma y/o en la nube. Node.js es ampliamente utilizado en la implementación real de dichas aplicaciones en la nube.
En este blog se explica cómo puede utilizar Node.js y Microsoft Azure Table Storage. Las soluciones de código abierto (OSS), son muy adecuadas para la implementación de aplicaciones independientes de la plataforma y/o en la nube. Node.js es ampliamente utilizado en la implementación real de dichas aplicaciones en la nube.
Node.js es una de las plataformas de crecimiento más populares para el desarrollo. Comencé una serie de publicaciones dedicadas a Node.js , comenzando con dos artículos sobre Node.js y Microsoft SQL Server. Intentaré demostrar en varios blogs algunos detalles sobre cómo usar Node.js con Microsoft Azure Storage.
What Is Azure Storage?
Los servicios de almacenamiento de Microsoft Azure nos permiten almacenar/recuperar los datos NO RELACIONALES hacia/desde el entorno de Microsoft Cloud. (En el caso de los datos relacionales, se utilizan los servicios de SQL Azure).
En el almacenamiento de Microsoft Azure, los datos se pueden almacenar en 4 formatos diferentes (v.i.z. Blobs, Tablas y colas, Almacenamiento de archivos (en versión preliminar)). La recuperación/almacenamiento de los datos anteriores se realiza de forma RESTful.
- Blob Storage almacena datos de archivos. Un blob puede ser cualquier tipo de texto o datos binarios, como un documento, un archivo multimedia o un instalador de aplicaciones.
- Table Storage almacena conjuntos de datos estructurados. Table Storage es un almacén de datos de clave-atributo NoSQL, que permite un rápido desarrollo y un acceso rápido a grandes cantidades de datos.
- El almacenamiento en cola proporciona mensajería confiable para el procesamiento del flujo de trabajo y para la comunicación entre los componentes de los servicios en la nube.
- El almacenamiento de archivos ofrece almacenamiento compartido para aplicaciones heredadas que utilizan el protocolo estándar SMB 2.1. Las máquinas virtuales de Azure y los servicios en la nube pueden compartir datos de archivos entre componentes de la aplicación a través de recursos compartidos montados, y las aplicaciones locales pueden acceder a los datos de archivo de un recurso compartido a través de la API de REST del servicio de archivos.
Este artículo se centra en cómo controlar Azure Table Services con Node.js
Almacenamiento de mesas
El servicio Azure Table Storage almacena grandes cantidades de datos estructurados. El servicio es un almacén de datos NoSQL que acepta llamadas autenticadas desde dentro y fuera de la nube de Azure.
El servicio Tabla contiene los siguientes componentes:
Entidades de tabla:
Las entidades de tabla representan las unidades de datos almacenadas en una tabla y son similares a las filas de una tabla de base de datos relacional típica. Cada entidad define una colección de propiedades. Cada propiedad es un par clave-valor definido por su nombre, valor y el tipo de datos del valor. Las entidades deben definir las tres propiedades del sistema siguientes como parte de la colección de propiedades:
- PartitionKey: la propiedad PartitionKey almacena valores de cadena que identifican la partición a la que pertenece una entidad. Esto significa que las entidades con los mismos valores de PartitionKey pertenecen a la misma partición. Las particiones, como se explica más adelante, son parte integral de la escalabilidad de la tabla.
- RowKey: la propiedad RowKey almacena valores de cadena que identifican de forma única las entidades dentro de cada partición.
- Marca de tiempo: la propiedad Marca de tiempo proporciona trazabilidad para una entidad. Una marca de tiempo es un valor DateTime que indica la última vez que se modificó la entidad. A veces se hace referencia a una marca de tiempo como la versión de la entidad. Las modificaciones de las marcas de tiempo se omiten porque el servicio de tablas mantiene el valor de esta propiedad durante todas las operaciones de inserción y actualización.
Considere la posibilidad de incluir PartitionKey, RowKey en el diseño. Piense en PartitionKey y RowKey como un índice principal.

Particiones de tabla:
Azure Tables usa claves que permiten realizar consultas eficaces y puede emplear una, PartitionKey, para equilibrar la carga cuando el servicio de tabla decide que es el momento de distribuir la tabla entre varios servidores. Una tabla no tiene un esquema especificado.
Las particiones representan una colección de entidades con los mismos valores de PartitionKey. Las particiones siempre se sirven desde un servidor de particiones y cada servidor de particiones puede servir una o más particiones.
Manejo de un almacenamiento de tablas de Azure
Puede usar diferentes paquetes de NodeJS para controlar Azure Table Storage. En esta publicación, cubriremos los paquetes de nodos azure y azure-table-node.
- Microsoft Azure SDK for Node.js
Es un SDK oficial de Microsoft Azure para Node.js. Este proyecto proporciona un paquete de Node.js que facilita el consumo y la administración de los servicios de Microsoft Azure.
En los fragmentos de código enumerados a continuación se muestra cómo administrar Azure Table Service mediante el SDK de Microsoft Azure para Node.js.
This is easy to do since the Azure SDK will look for credentials using environment variables first. The magical environment variable names are AZURE_STORAGE_ACCOUNT and AZURE_STORAGE_ACCESS_KEY.
- Creación de un servicio de tabla
Establecer credenciales mediante variables de entorno
var azure = require('azure');
//using enviroment variables for credentials
var tableService = azure.createTableService(); // implicitly use env variables
tableService = azure.createTableService(
process.env.AZURE_STORAGE_ACCOUNT,
process.env.AZURE_STORAGE_ACCESS_KEY); // explicit
Establecer credenciales de forma explícita mediante variables locales
var accessKey = '[accountKey]'; var storageAccount = '[accountName]'; var tableService = azure.createTableService(accessKey, storageAccount); // explicit
- Insert an entity
var tableService = azure.createTableService();
//insert an entity
var task1 = {
PartitionKey : 'myPartitionKey',
RowKey: '1',
Description: 'Row description',
DueDate: new Date(2011, 12, 14, 12)
};
tableService.insertEntity('tasktable', task1, function(error){
if(!error){
// Entity inserted
});
- Entidades de consulta
//query an entity
var tableService = azure.createTableService();
tableService.queryEntity('demotable', 'myPartitionKey', '1', function(error, serverEntity){
if(!error){
// Entity available in serverEntity variable
}
});
- azure-table-node:
Se trata de una biblioteca cliente simplificada de Azure Table Storage para Node.js que admite:
- Crear, eliminar y listar tablas
- Creación, actualización, consulta y eliminación de entidades
- Compatibilidad con operaciones por lotes
- generar SAS (Firma de Acceso Compartido) y utilizarla para la autenticación
Los siguientes ejemplos de código muestran cómo usar el módulo azure-table-node para trabajar con Azure Table Storage
- Set Azure Storage credentials
var azureTable = require('azure-table-node')
//set azure storage credentials
azureTable.setDefaultClient({
accountUrl: 'http://[accountName].table.core.windows.net/',
accountName: '[accountName]',
accountKey: '[accountKey]'
});
- Create an Azure Table
//create azure table
app.get("/createTable", function (req, res) {
var client = azureTable.getDefaultClient();
client.createTable('testtable', function (err, data) {
});
client.insertEntity('testtable', {
PartitionKey: 'tests',
RowKey: '1',
value1: 'ABCDEFG'
},
function (err, data) {
res.write("Got error :-( " + err);
});
res.end("Table created.");
});
- Visualización de una tabla de Azure
//display an azure table
app.get("/displayTable", function (req, res) {
var client = azureTable.getDefaultClient();
client.queryEntities('testtable', {
query: azureTable.Query.create('PartitionKey', '==', 'tests')
},
function (err, data, continuation) {
if (err) {
res.writeHead(500, { 'Content-Type': 'text/plain' });
res.write("Got error :-( " + err);
res.end("");
return;
}
var json = JSON.stringify(data);
res.writeHead(200, { 'Content-Type': 'text/plain' })
res.end("Table displayed: " + json);
});
});

- Enumeración de todas las tablas de Azure
//list all azure tables
app.get("/listTables", function (req, res) {
var client = azureTable.getDefaultClient();
client.listTables(function (err, data, continuation) {
if (err) {
res.writeHead(500, { 'Content-Type': 'text/plain' });
res.write("Got error :-( " + err);
res.end("");
return;
}
res.writeHead(200, { 'Content-Type': 'text/plain' })
for (var i = 0; i < data.length; i++) {
res.write("Table[" + i + "]: " + data[i] + " " );
}
res.end("Tables listed." + data);
});
});

- Eliminación de una tabla de Azure
//delete azure table
app.get("/deleteTable", function (req, res) {
var client = azureTable.getDefaultClient();
client.deleteTable('testtable', function (err, data) { });
res.end("Table testtable has been deleted.");
});

Hay mucho más que aprender sobre los servicios de tabla de Azure y Node. Las características y capacidades del almacenamiento de tablas siguen creciendo. Esta publicación es solo una introducción sobre cómo comenzar, que cubre los casos base y los módulos de Node.js más populares para Azure Tables. Será útil tanto para los desarrolladores de JavaScript que no tienen experiencia con Microsoft Azure como para los desarrolladores de Azure que tienen menos experiencia con JavaScript y/o Node.js.
Los desarrolladores de la plataforma Microsoft Azure deben familiarizarse con el funcionamiento de Table Storage y en qué se diferencia de las bases de datos relacionales a las que están acostumbrados. Saber cómo funciona el almacenamiento de mesa te ayudará a determinar si es una buena opción para tus necesidades particulares.
Puede descargar el código fuente del repositorio Git.

If you want more information about how to use Microsoft Azure Storage & Node.js feel free to contact me at mmateev@infragistics.com
Puede obtener más información sobre Node.js, Microsoft Azure y eventos relacionados como Azure Bootcamp Bulgaria si nos sigue en Twitter @mihailmateev y @ Infragistics y mantenerse en contacto en Facebook, Google+, LinkedIn y Infragistics grupo de usuarios de amigos.