Este artigo foi traduzido por máquina.

Previsão: Nublado

Armazenamento de tabela do SQL Azure e do Windows Azure

Joseph Fultz

Baixe o código de exemplo

Joseph FultzUm cenário comum que seja executada da minha família é que decidimos levá-la fácil durante a noite e desfrutar de uma noite de check-out, comer juntos. Todo mundo gosta isso e goza de tempo para comer e relaxar. Nós temos muitas das opções de restaurante em nossa área dessa forma, acontece, a menos que alguém tenha uma preferência particularmente forte, podemos obter preso a Terra limbo de decidir onde comer.

É esse mesmo problema de escolher entre aparentemente igualmente boas opções encontrar muitos de minha experiência de clientes e colegas ao decidir qual mecanismo de armazenamento para usar na nuvem. Em geral, o ponto de confusão é entender as diferenças entre Windows Azure tabela Storage e SQL Azure.

Não é possível informar qualquer pessoa que opção de tecnologia para fazer, mas eu fornecerá algumas diretrizes para tomar a decisão ao avaliar as necessidades da solução e a equipe de solução com os recursos e as restrições para o armazenamento do Windows Azure Table e SQL Azure. Além disso, adicionarei em uma pitada de código para que a sensação de desenvolvedor para trabalhar com cada um.

Processamento de dados

Outros relacional e SQL Azure bancos de dados geralmente fornecem recursos de processamento de dados de um sistema de armazenamento. Em geral, os usuários do RDBMS estão mais interessados no processamento de dados do que os aspectos de armazenamento e recuperação brutos de um banco de dados.

Por exemplo, se você quiser saber a receita total para a empresa em um determinado período, talvez você precise examinar centenas de megabytes de dados de vendas e calcular uma soma. Em um banco de dados, você pode enviar uma única consulta (alguns bytes) no banco de dados fará com que o banco de dados recuperar os dados (possivelmente muitos gigabytes) de disco na memória, filtrar dados com base no intervalo de tempo apropriado (para baixo até vários centenas megabytes de cenários comuns), calcular a soma das estimativas de vendas e retornar o número para o aplicativo cliente (alguns bytes).

Para fazer isso com um sistema de armazenamento puro requer que o computador que executa o código do aplicativo para recuperar todos os dados não processados na rede do sistema de armazenamento e, em seguida, o desenvolvedor deve escrever o código para executar uma soma nos dados. Mover uma grande quantidade de dados do armazenamento para o aplicativo para processamento de dados tende a ser muito dispendiosa e lenta.

SQL Azure fornece recursos de processamento de dados por meio de consultas, transações e procedimentos armazenados que são executados no lado do servidor e somente os resultados são retornados para o aplicativo. Se você tiver um aplicativo que requer o processamento de dados grandes conjuntos de dados, SQL Azure é uma boa opção. Se você tiver um aplicativo que armazena e recupera a grandes conjuntos de dados (verificações/filtros), mas não requer o processamento de dados, o armazenamento do Windows Azure tabela é uma escolha melhor.

— Tony Petrossian, principal gerente de programas, Windows Azure

As opções de revisão

Expandir o escopo brevemente para incluir outros mecanismos de armazenamento para transmitir um pouco de visão geral, em um alto nível é fácil a opções de armazenamento separado para estas partições de memória grandes:

  • Acesso a dados relacionais: SQL Azure
  • Acesso a arquivos e de objeto: Windows Storage Azure
  • Cache local baseado em disco: armazenamento de função local

No entanto, para qualificar ainda mais opções, você pode iniciar pedindo a algumas perguntas simples, como:

  • Como faço arquivos disponíveis para todas as funções com freqüência?
  • Como disponibilizar arquivos e facilmente atualizá-los?
  • Como pode fornecem acesso estruturado semântica, mas também fornecem armazenamento e desempenho suficiente?
  • Que fornece o melhor desempenho ou melhor escalabilidade?
  • Quais são os requisitos de treinamento?
  • O que é a história do gerenciamento?

O caminho para uma decisão clara começa a enlamear e é fácil obter perdidos em uma comparação de benefícios em relação a restrição de recursos. Enfocando volta SQL Azure e armazenamento de tabela do Windows Azure, vou Descrever alguns padrões de uso ideal e dar alguns exemplos de código usando cada um.

SQL Azure Basics

SQL Azure fornece a funcionalidade básica de um banco de dados relacional para uso pelos aplicativos. Se um aplicativo tem dados que precisam ser hospedados em um banco de dados relacional gerenciamento RDBMS (sistema), essa é a melhor opção. Ele oferece toda a semântica comum para acesso a dados por meio de instruções SQL. Além disso, o SQL Server Management Studio (SSMS) pode conectar diretamente ao SQL Azure, que fornece um meio fácil de usar e bem conhecido de trabalhar com o banco de dados fora do código.

Por exemplo, configurando um novo banco de dados ocorre em algumas etapas que precisam do console de gerenciamento do SQL Azure da Web e o SSMS. Essas etapas são:

  1. Criar banco de dados por meio da Web
  2. Criar regra a fim de acessar o banco de dados do computador local
  3. Conectar-se ao banco de dados da Web por meio do SSMS local
  4. Execute o DDL dentro do contexto do recipiente do banco de dados

Se um aplicativo usa o SQL Server no momento ou back-end de um RDBMS semelhante, SQL Azure será o caminho mais fácil de mover os dados na nuvem.

SQL Azure também é a melhor opção para fornecer acesso baseado em nuvem para dados estruturados. Isso é verdadeiro se o aplicativo está hospedado no Windows Azure ou não. Se você tiver um aplicativo móvel ou até mesmo um aplicativo de desktop, SQL Azure é a maneira de colocar os dados na nuvem e acessá-lo a partir desses aplicativos.

Usar um banco de dados na nuvem não é muito diferente do uso de um que tiver hospedado na empresa — com uma exceção notável que a autenticação precisa ser tratado por meio da autenticação do SQL Server. Talvez seja conveniente dar uma olhada no Microsoft Project Code-Named “ Houston ”, que é um novo console de gerenciamento que estão sendo desenvolvidos para o SQL Azure, criados com o Silverlight. Detalhes sobre este projeto estão disponíveis de sqlazurelabs.cloudapp.net/houston.aspx .

SQL Azure Development

Escrevendo um aplicativo de exemplo rápido é apenas um Windows Form que hospeda um datagrid que exibe os dados do banco de dados Pubs é não mais complicado do que era quando o banco de dados era local. Eu iniciar o assistente no Visual Studio para adicionar uma nova fonte de dados e orienta-me por meio da criação de uma seqüência de conexão e um conjunto de dados. Nesse caso, eu terminar com uma seqüência de conexão no meu arquivo app. config que tem esta aparência:

<add name="AzureStrucutredStorageAccessExample.Properties.Settings.pubsConnectionString"

     connectionString="Data Source=gfkdgapzs5.database.windows.
net;Initial Catalog=pubs;Persist Security Info=True;User ID=jofultz;Password=[password]"

     providerName="System.Data.SqlClient" />

Geralmente a autenticação integrada é a opção para segurança de banco de dados, para que fique parece um pouco complicado usando a autenticação do SQL Server novamente. SQL Azure minimiza a exposição através da aplicação de uma lista de acesso IP ao qual você precisará adicionar uma entrada para cada intervalo de IPs que talvez estejam se conectando ao banco de dados.

Voltando ao meu exemplo trivial intencionalmente, escolhendo o modo de exibição Titleview fora do banco de dados pubs, também tenham alguns códigos gerados no pubsDataSet dataset chamado por padrão, conforme mostrado no Figura1.

image: Automatically Generated Code for Accessing SQL Azure

Figura 1 do código gerado automaticamente para acessar o SQL Azure

Posso fazer algumas operações arrastar-e-soltar, arrastando um DataGridView para o formulário e configurar a conexão para conectar. Depois que ele esteja conectado até, eu executo e o fim com um modo de exibição de grade rápida dos dados, conforme mostrado no Figura 2.

image: SQL Azure Data in a Simple Grid

A Figura 2 SQL Azure dados em uma grade Simple

Eu não estou tentando vender a idéia de que você pode criar um aplicativo empresarial através de assistentes no Visual Studio, mas em vez disso, que o acesso a dados é mais ou menos equivalente ao SQL Server e se comporta e perceber como o esperado. Isso significa que você pode gerar um modelo de entidades em relação a ele e usar o LINQ, assim como eu poderia fazê-lo se ele fosse local em vez de hospedagem (consulte do Figura 3).

image: Using an Entity Model and LINQ

De usando um modelo de entidade e o LINQ, a Figura 3

Um ótimo novo recurso acréscimo além do escopo do disponível normalmente baseados em SQL Server local banco de dados é a opção (disponível no momento por meio de sqlazurelabs.com ) para expor os dados como um OData feed. Obtenha o REST consultas como este:

https://odata.sqlazurelabs.com/  

  OData.svc/v0.1/gfkdgapzs5/pubs/  

  authors?$top=10

Isso resulta em uma resposta OData ou, usando o formato $ = parâmetro JSON, uma resposta JSON.Esta é uma enorme vantagem para desenvolvedores de aplicativos, pois não apenas se o comportamento padrão do SQL Server, como também os métodos de acesso adicionais por meio da configuração em vez de escrever uma única linha de código.Isso permite que o foco seja colocado em camadas de serviços ou de aplicativos que agreguem valor comercial versus o direcionamento para transmitir dados dentro e fora do armazenamento de conexão.

Se um aplicativo precisar de acesso a dados relacionais tradicionais, SQL Azure é provavelmente a escolha de melhor e mais fácil.Mas há várias outras razões para considerar SQL Azure como a principal escolha sobre armazenamento de tabela de Azure do Windows.

O primeiro motivo é se você tem uma taxa alta de transação, que significa que há em consultas freqüentes (todas as operações) em relação ao armazenamento de dados.Não há nenhum cobranças por transação SQL Azure.

SQL Azure também lhe dá a opção de configurar a sincronização de dados do SQL Azure (sqlazurelabs.com/SADataSync.aspx) entre vários bancos de dados Windows Azure, juntamente com a capacidade de sincronizar dados entre bancos de dados locais e as instalações do SQL Azure (microsoft.com/windowsazure/developers/sqlazure/datasync/ ).Falarei sobre design e o uso do SQL Azure e DataSync com o local de armazenamento em uma próxima coluna, quando posso abordar a arquitetura de nó de ramificação usando SQL Azure.

Armazenamento de tabela Azure do Windows

Agora você viu as vantagens de usar SQL Azure para seu armazenamento.Portanto, quando é mais útil contar com o armazenamento do Windows Azure tabela?Aqui estão alguns dos cenários onde SQL Azure não pode ser a escolha certa.

Se um aplicativo está sendo overhauled para mover para a Web ou a implementação de camada de armazenamento de dados não será concluída, você provavelmente deseja dar uma olhada no armazenamento do Windows Azure tabela.Da mesma forma, o armazenamento do Windows Azure tabela faz sentido se você não precisa de um armazenamento relacional ou o acesso é limitado a uma única tabela em um momento e não exige a associações.Nesse caso, seria pequenos conjuntos de dados e associações podem ser manipulada de cliente pelo LINQ.

Você também desejará dar uma olhada no Windows Azure tabela Storage, se você tiver mais dados do que o máximo suportado pelo Azure SQL (que é atualmente 50 GB para uma única instância).Observe que a limitação de tamanho pode ser superada com alguns particionamento de dados, mas o que poderia gerar até os custos de SQL Azure.O mesmo espaço de armazenamento de tabela do Windows Azure provavelmente seria mais barato e tem o particionamento internos por uma chave de partição declarada.

Além disso, devido a dos encargos por transação para o armazenamento de tabela de Azure do Windows, dados com uma freqüência menor acesso ou dados que podem ser facilmente em cache seria uma boa opção.

Algumas coisas que tornam o armazenamento do Windows Azure tabela interessante incluem se o aplicativo precisa acessar alguns estilo estruturados, como pesquisa indexada, mas armazena principalmente objetos ou Binary Large Objects (BLOBs) / (CLOBs) de objetos grandes de caractereSe seu aplicativo se beneficiará da variabilidade do tipo de suporte para os dados em tabela;ou, se a estrutura de dados existente (ou falta therof) em sua instalação do SQL Server torna difícil a migração.

Usando o armazenamento de tabela Azure do Windows

A princípio, trabalhar com o armazenamento do Windows Azure tabela pode parecer um pouco complicado devido às suposições feitas, relacionando “ armazenamento tabela ” para um banco de dados SQL.O uso de “ tabela ” o nome não ajuda.Ao pensar em armazenamento de tabela do Windows Azure, sugiro que você pense nisso como objeto de armazenamento.

Como desenvolvedor, não se concentrar na estrutura de armazenamento ou do mecanismo;em vez disso, concentre-se sobre o objeto e você pretende fazer com ele.Obtendo os objetos configurados no armazenamento do Windows Azure tabela geralmente é o maior obstáculo para o desenvolvedor, mas acessando o armazenamento de tabela de Azure Windows por meio de objetos é natural, principalmente se você utilizar o LINQ.

Para trabalhar com o Windows Azure tabela Storage, comece adicionando uma referência ao System.Data.Services.Client ao seu projeto.Além disso, adicione uma referência ao Microsoft.WindowsAzure.StorageClient.dll se você não estiver trabalhando em um modelo de nuvem do Studio Visual (que fornece essa referência para você).

Em seguida, crie uma objeto/entidade à qual você pode trabalhar (roubo da tabela autores):

public class TableStorageAuthor:

  Microsoft.WindowsAzure.StorageClient.TableServiceEntity {

  public int Id {get; set;}

  public string LastName { get; set; }

  public string FirstName { get; set; }

  public string Phone { get; set; }

  public string Address { get; set; }

  public string City { get; set; }

  public string State { get; set; }

  public string Zip {get; set;}

}

Você pode definir um contexto de cliente de serviços de dados usando TableServiceContext para lidar com a conexão para o armazenamento e siga as operações CRUD (Create/Read/Update/Delete), conforme mostrado no Figura 4. A classe TableStorageAuthor é usada como a classe de modelo para declarar o elemento AuthorData para os quais um método de consulta de tabela para a tabela de autores retornado. Ele também é usado como um tipo de parâmetro para a operação de adicionar implementada.

De acessar o armazenamento de tabela Azure do Windows, a Figura 4

public class AuthorDataServiceContext : TableServiceContext {

  public IQueryable<TableStorageAuthor> AuthorData {

    get {

      return this.CreateQuery<TableStorageAuthor>("Authors");

    }

  }



  public AuthorDataServiceContext (

    Uri baseAddress, StorageCredentials credentials)

    : base(baseAddress.AbsoluteUri, credentials) {}



  public void Add(TableStorageAuthor author) {

    this.AddObject("Authors", author);

    DataServiceResponse dsResponse = SaveChanges();

  }

}

Crie a tabela de destino:

TableClient.CreateTableIfNotExist("Authors");

Usando um objeto familiares de criação e o paradigma de atribuição de propriedade, criar alguns dados e adicioná-lo para a tabela foi criada no armazenamento (consulte do Figura 5).

A Figura 5 de Adicionar dados ao armazenamento de tabela Azure do Windows

var TableClient = StorageAccount.CreateCloudTableClient();



TableStorageAuthor author = new TableStorageAuthor();

author.FirstName = "Joseph";

author.LastName = "Fultz";

author.RowKey = System.Guid.NewGuid().ToString();

author.Id = author.RowKey;

author.State = "TX";

author.PartitionKey = "TX";



AuthorDataServiceContext ctx = 

  new AuthorDataServiceContext(

  StorageAccount.TableEndpoint, 

  StorageAccount.Credentials);

ctx.Add(author);

Depois que todos os dados do está lá, ele pode ser manipulado com o LINQ. Por exemplo, seria uma seleção para as entidades:

AuthorDataServiceContext ctx = 

  new AuthorDataServiceContext(

  StorageAccount.TableEndpoint, 

  StorageAccount.Credentials);



var authors = 

  from a in ctx.AuthorData

  select a;



foreach (TableStorageAuthor ta in authors) {

  Debug.WriteLine(ta.FirstName + " " + ta.LastName);

}

Eu não implementar a atualização e exclusão, mas eles seriam semelhantes. A única coisa que pode ser um pouco diferentes daqueles que usaram o LINQ com o Entity Framework é o código para criar o TableServiceContext e o código subseqüente para construir e usá-lo. Se você tiver trabalhado com o REST e o objeto DataServiceContext, fazer esse trabalho poderá ser bastante natural.

Usando o TableServiceContext, TableServiceEntity e LINQ, você obtém sobre o mesmo estilo como usar o Entity Framework e LINQ com SQL Azure — embora com um pouco mais codificação manual do lado do armazenamento do Windows Azure Table.

Com base em solução de avaliação

Conforme mencionado anteriormente, se o aplicativo tiver um armazenamento relacional já estabelecido, é provável que melhor migrar que para o SQL Azure com uma pequena ajuda de uma ferramenta como o SQL Azure Migration Wizard. No entanto, se não for o caso, ou a parte de nuvem do aplicativo não precisa da funcionalidade completa de um RDBMS, dê uma olhada na matriz do Figura 6 e ver quais colunas devem atendem a maioria das necessidades dos requisitos da solução e arquitetura.

Figura 6 de Comparando Azure SQL e o armazenamento de tabela Azure do Windows

Recurso SQL Azure Benefit(s) comuns Armazenamento de tabela Azure do Windows
Selecione a semântica Consultas de tabela cruzada Com base em chave primária de pesquisa Pesquisa de chave única (por partição)
Desempenho e dimensionamento De alto desempenho por meio de vários índices, estruturas de dados normalizados e até e dimensionável por meio do manual do particionamento em SQL Azure instâncias   Automática em larga escala por partição e consistente de desempenho, mesmo em grande escala
Experiência do usuário Ferramentas de gerenciamento bastante conhecido e o design de banco de dados tradicional Experiência do desenvolvedor familiarizado de alto nível Serialização direta;não necessário; de ORMmodelo de design simplificada por meio da remoção do modelo relacional
Estilo de armazenamento Modelo de design relacionais tradicionais Armazenamento de dados para todos os tipos de dados Tipo de variabilidade em uma única tabela.
Fatores de custos Nenhuma transação de custo, pagamento pelo tamanho do banco de dados Custo do tráfego de rede fora do datacenter mesmo Não há espaço em custo, de pagamento para o que é usado
Carregamento de dados e a sincronização A sincronização entre local e cloud-based armazena;dados facilmente movidos entrada e saída pela extração tradicional, transformação e carga (ETL) mecanismos;a sincronização entre bancos de dados SQL Azure em centros de dados diferentes    

É importante observar que para alguns dos itens em Figura 6 (por exemplo, aqueles relacionados ao gerenciamento e dados carregando para o armazenamento do Windows Azure Table) já existem soluções de terceiros, entrando no mercado para fornecer a funcionalidade ausente. Dessa forma, o custo e a funcionalidade de tais ferramentas precisarão ser considerado para projetos significativos.

Espero que muitos aplicativos precisará de uma abordagem de dados híbrida para fazer o melhor uso da tecnologia. Por exemplo, o Windows Azure tabela Storage seria usado para otimizar os tempos de busca e ainda fornecer larga escala para recursos, como documentos, vídeos, imagens e outras mídias desse tipo. No entanto, para facilitar a pesquisando de metadados do item, dados relacionados e ponteiros de objeto seriam armazenados no SQL Azure. Como um design também poderia reduzir o tráfego de transação contra o armazenamento de tabela de Azure do Windows. Esse tipo de projeto complementar pode fornecer os seguintes benefícios:

  • Manter a taxa de transferência alta para as consultas localizar recursos
  • Reduzir o tamanho do banco de dados SQL Azure, para que o custo para que ele permaneça mínimo
  • Minimizar o custo de armazenamento, armazenando os arquivos grandes no armazenamento do Windows Azure tabela versus SQL Azure (embora o armazenamento BLOB é preferencial para arquivos)
  • Manter uma recuperação rápida de desempenho, tendo como busca recursos por chave e a partição e transferindo a carga de consulta de recuperação do banco de dados SQL Azure
  • Permitir o dimensionamento automático e em massa para os dados mantidos no armazenamento do Windows Azure tabela

Em Resumo: O design deve permitir que cada mecanismo de armazenamento fornecer a parte da solução que é melhor em execução, em vez de tentar um tem a fazer o trabalho dos dois. De qualquer forma, você ainda quer a nuvem por uma resposta.

Joseph Fultz é arquiteto no Centro de tecnologia da Microsoft em Dallas, onde trabalha com os ISVs e clientes corporativos soluções de software de design e criação de protótipos para atender às demandas de negócios e de mercado. Ele tem se falado em eventos como Tech · Ed e eventos de treinamento interno semelhante.

Graças aos seguintes especialistas técnicos para revisão deste artigo: Jai Haridas, Tony Petrossian and Suraj Puri