Ir para o conteúdo
Como gerenciar o armazenamento de tabelas do Microsoft Azure com Node.js

Como gerenciar o armazenamento de tabelas do Microsoft Azure com Node.js

Este blog discute como você pode usar o Node.js e o Armazenamento de Tabelas do Microsoft Azure. As soluções de código aberto (OSS), são muito adequadas para a implementação de aplicações independentes de plataforma e/ou cloud. Node.js é amplamente utilizado na implementação real de tais aplicativos em nuvem.

7min read

Este blog discute como você pode usar o Node.js e o Armazenamento de Tabelas do Microsoft Azure. As soluções de código aberto (OSS), são muito adequadas para a implementação de aplicações independentes de plataforma e/ou cloud. Node.js é amplamente utilizado na implementação real de tais aplicativos em nuvem.

Node.js é uma das plataformas de crescimento mais populares para desenvolvimento.  Iniciei uma série de posts dedicados ao Node.js, começando com dois artigos sobre Node.js e Microsoft SQL Server. Vou tentar demonstrar em vários blogs alguns detalhes de como usar Node.js com o Armazenamento do Microsoft Azure.

What Is Azure Storage?

Os serviços de armazenamento do Microsoft Azure nos permitem armazenar/recuperar os dados NÃO RELACIONAIS de/para o ambiente do Microsoft Cloud. (Para dados relacionais, os serviços do SQL Azure são usados).

No Armazenamento do Microsoft Azure, os dados podem ser armazenados em 4 formatos diferentes (v.i.z. Blobs, Tabelas e Filas, Armazenamento de Arquivos (em versão prévia)). A recuperação/armazenamento dos dados acima é feita de forma RESTful.

  • O armazenamento de blobs armazena dados de arquivo. Um blob pode ser qualquer tipo de texto ou dados binários, como um documento, arquivo de mídia ou instalador de aplicativo.
  • O armazenamento de tabelas armazena conjuntos de dados estruturados. O armazenamento de tabelas é um armazenamento de dados de atributo de chave NoSQL, que permite o desenvolvimento rápido e o acesso rápido a grandes quantidades de dados.
  • O armazenamento de filas fornece mensagens confiáveis para processamento de fluxo de trabalho e para comunicação entre componentes de serviços em nuvem.
  • O armazenamento de arquivos oferece armazenamento compartilhado para aplicativos legados usando o protocolo SMB 2.1 padrão. As máquinas virtuais e os serviços de nuvem do Azure podem compartilhar dados de arquivo entre componentes do aplicativo por meio de compartilhamentos montados, e os aplicativos locais podem acessar dados de arquivo em um compartilhamento por meio da API REST do serviço de arquivo.

Este artigo se concentra em como lidar com os serviços de Tabela do Azure com Node.js

Armazenamento de mesa

O serviço de armazenamento de Tabelas do Azure armazena grandes quantidades de dados estruturados. O serviço é um armazenamento de dados NoSQL que aceita chamadas autenticadas de dentro e de fora da nuvem do Azure.

O serviço Tabela contém os seguintes componentes:

Entidades de tabela:

As entidades de tabela representam as unidades de dados armazenadas em uma tabela e são semelhantes às linhas em uma tabela de banco de dados relacional típica. Cada entidade define uma coleção de propriedades. Cada propriedade é um par chave/valor definido por seu nome, valor e tipo de dados do valor. As entidades devem definir as três propriedades do sistema a seguir como parte da coleção de propriedades:

  • PartitionKey: a propriedade PartitionKey armazena valores de cadeia de caracteres que identificam a partição à qual uma entidade pertence. Isso significa que entidades com os mesmos valores de PartitionKey pertencem à mesma partição. As partições, conforme discutido posteriormente, são parte integrante da escalabilidade da tabela.
  • RowKey: a propriedade RowKey armazena valores de cadeia de caracteres que identificam exclusivamente entidades em cada partição.
  • Timestamp: a propriedade Timestamp fornece rastreabilidade para uma entidade. Um carimbo de data/hora é um valor DateTime que informa a última vez que a entidade foi modificada. Às vezes, um carimbo de data/hora é chamado de versão da entidade. As modificações nos carimbos de data/hora são ignoradas porque o serviço de tabela mantém o valor dessa propriedade durante todas as inserções e operações de atualização.

Considere PartitionKey, RowKey em seu design. Pense em PartitionKey e RowKey como sendo um índice primário.

Partições de tabela:

As Tabelas do Azure usam chaves que permitem consultas eficientes, e você pode empregar uma — a PartitionKey — para balanceamento de carga quando o serviço Tabela decidir que é hora de distribuir sua tabela por vários servidores. Uma tabela não tem um esquema especificado.

As partições representam uma coleção de entidades com os mesmos valores de PartitionKey. As partições são sempre atendidas a partir de um servidor de partição e cada servidor de partição pode servir a uma ou mais partições.

Lidando com um Armazenamento de Tabelas do Azure

Você pode usar diferentes pacotes NodeJS para lidar com o Armazenamento de Tabelas do Azure. Nesta postagem, abordaremos os pacotes de nó azure e azure-table-node.

  • Microsoft Azure SDK for Node.js

É um SDK oficial do Microsoft Azure para Node.js. Este projeto fornece um pacote Node.js que facilita o consumo e o gerenciamento dos Serviços do Microsoft Azure.

Os snippets listados abaixo demonstram como gerenciar o serviço de Tabela do Azure usando o SDK do Microsoft Azure para Node.js.

Isso é fácil de fazer, pois o SDK do Azure procurará credenciais usando variáveis de ambiente primeiro. Os nomes das variáveis de ambiente mágico são AZURE_STORAGE_ACCOUNT e AZURE_STORAGE_ACCESS_KEY.

  • Criar um serviço de tabela

Definir credenciais usando variáveis de ambiente

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

Definir credenciais explicitamente usando variáveis locais

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:

É uma biblioteca de cliente simplificada do Armazenamento de Tabelas do Azure para Node.js que dá suporte a:

  • Criando, excluindo e listando tabelas
  • Criando, atualizando, consultando e excluindo entidades
  • Suporte à operação em lote
  • gerar SAS (Assinatura de Acesso Compartilhado) e usá-la para autenticação

 

Os exemplos de código abaixo mostram como usar o módulo azure-table-node para trabalhar com o Armazenamento de Tabelas do Azure

  • 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.");
});
  • Exibir uma Tabela do 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);
       });
 });
Exibir uma Tabela do Azure
  • Listar todas as tabelas do 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);
     });
 });

 

  • Excluir uma tabela do 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.");  
 });
Excluir uma tabela do Azure

Há muito mais para aprender sobre os Serviços de Tabela do Azure e o Node.  Os recursos e funcionalidades do armazenamento de tabelas continuam a crescer. Esta postagem é apenas uma introdução sobre como começar, abordando os casos base e os módulos de Node.js mais populares para Tabelas do Azure. Será útil para desenvolvedores de JavaScript que não têm experiência com o Microsoft Azure e desenvolvedores do Azure que têm menos experiência com JavaScript e/ou Node.js.

Os desenvolvedores na plataforma Microsoft Azure devem se familiarizar com o funcionamento do Armazenamento de Tabelas e como ele difere dos bancos de dados relacionais aos quais estão acostumados. Saber como funciona o armazenamento de tabelas ajudará você a determinar se ele é adequado para suas necessidades específicas.

Você pode baixar o código-fonte do repositório Git.

 

If you want more information about how to use Microsoft Azure Storage  & Node.js feel free to contact me at mmateev@infragistics.com

Você pode saber mais sobre Node.js, Microsoft Azure e eventos relacionados, como o Azure Bootcamp Bulgaria, se você nos seguir no Twitter @mihailmateev e @ Infragistics e manter contato no Facebook, Google+, LinkedIn e Infragistics Grupo de Usuários de Amigos!

Solicite uma demonstração