SlideShare une entreprise Scribd logo
1  sur  43
SQL Azure Federations
       Vítor Tomaz
About Me


Vítor Tomaz
Consultor Independente
Email: vitorbstomaz@gmail.com
Twitter: @vitortomaz
Patrocinadores
Agenda

SQL Azure Database Overview
Escalabilidade
Conceitos
Utilização nas aplicações
SQL Azure Database Overview
Account
           Cada conta tem 0 ou mais servidores lógicos
             Criada através do portal
           Cada servidor lógico tem uma ou mais bases de
           dados
             Contém informações aceca das base de dados e consumos
 Server      Unidade de autenticação, geo-localização, billing, e
             reporting
             Nome gerado automáticamente
           Uma base de dados tem objectos SQL
Database     Utilizadores, Tabelas, Views, Indices, etc
             Unidade de consistência
SQL Azure Database Overview

Web Edition       Business Edition




1Gb      5Gb   10Gb   20,30,40,50,100   150Gb
SQL Azure Database Overview
            Três
     Uma        Base de Dados
Base de Dados      Físicas
    Lógica
                     Primary




                   Secondary 1
       DB



                   Secondary 2
Escalabilidade
Escalabilidade
Elasticidade
Baixo Investimento Inicial
Pago o que Uso
Não há (demasiados) recursos desperdiçados
Escalabilidade

Scale Out
                                        150Gb
                              SQL       Compute
                              SQL
                             Azure
                             Azure



                             Scale Up



                 Scale Out
SQL Azure Architecture
         Client Layer




     Infrastructure Layer
SQL Azure Architecture
Platform Layer
            Node 14
       SQL Server Instance
         SQL Server DB
User      User        User   User
DB1       DB2         DB3    DB4



          SQL Azure Fabric



             Node 15
       SQL Server Instance
         SQL Server DB
User      User        User   User
DB1       DB2         DB3    DB4



          SQL Azure Fabric
Multi-tenant

Uma base de dados por tenant
  Custo mínimo por tenant 9.99$

Tudo numa base de dados
  Limite de capacidade de processamento
  Limitado a 150Gb
Sharding
PartitionKey
PartitionKey   RowKey
               RowKey                   Timestamp
                                        Timestamp    ModelYear
                                                     ModelYear
(Category)
(Category)     (Title)
               (Title)

Bikes          Super Duper Cycle        …            2009

Bikes          Quick Cycle 200 Deluxe   …            2007

…
…              …
               …                        …
                                        …            …
                                                     …
Canoes
Canoes
               Whitewater
               Whitewater
                                        …
                                        …
                                                     2009
                                                     2009
Canoes         Flatwater                …            2006
Canoes         Flatwater                …            2006

PartitionKey
Rafts          RowKey
               14ft Super Tourer        …Timestamp   ModelYear
                                                     1999
(Category)     (Title)
…
Rafts
               …
               14ft Super Tourer
                                        …
                                         …
                                                     …
                                                     1999
Skis
…              Fabrikam Back Trackers
               …                        ……           2009
                                                     …

…
Skis           …
               Fabrikam Back Trackers   ……           …
                                                     2009

…
Tents          …
               Super Palace             ……           …
                                                     2008

Tents          Super Palace             …            2008
Sharding

Sharding de uma base de dados

Sharding numa aplicação multi-tenant
Distribuição dos dados
Centralizados
  Disponíveis num único local   Centralizados            Particionados

  Poucas leituras e escritas
Particionados                      Configs      Dados1      Dados2       Dados3
  Cada “pedaço” reside apenas                     CP          CP           CP

  numa base de dados
                                                          Replicados
Replicados
  Leituras
  Escritas são raras
Arquitectura
Federation Root
  contêm todas as
                              Federation Root
  informações sobre o
  particionamento dos                           Federations
  dados                                                        Federation Members
                                 AppDB
Federations
  objectos que suportam a
  funcionalidade de                                           ClientesFed
  distribuição dos dados
  entre as várias partições
Arquitectura
Federation Member
  Instância de SQL Azure
Federation Key                        Federation Key   Member : Range [100,300]

  campo que identifica univocamente                    ID=110       ID=210
  cada partição                         Unidades         ID=120       ID=220
                                        Atómicas
Unidades Atómicas                                          ID=130       ID=230
  conjunto de dados com a mesma
  federation key
  ficam garantidamente no mesmo
  federation member
DEMO
Criação de uma Federação
Regras

CREATE FEDERATION nome_federacao (nome_distribuicao <tipo> RANGE)
  Nome da federação têm que ser único dentro de uma base de
  dados
  Tipo de dados terá que ser INT, BIGINT, UNIQUEIDENTIFIER ou
  VARBINARY(n) onde o n poderá ir até 900
Regras
Dados Centralizados
  Criados na root database

Dados Particionados (federados)
  Criados no federation member
  Com o atributo FEDERATED ON ()

Dados Replicados
  Criados no federation member
  Sem o atributo FEDERATED ON ()
Regras
CREATE TABLE Produto(…) FEDERATED ON (ID=ProdutoID)
  O tipo de dados desta coluna tem que ser obrigatoriamente igual ao
  tipo de dados da chave da federação.
  Não pode ter valor nulo.
  Não pode ser actualizada para valores fora do range do membro
  actual.
  Não pode ser uma computed column.
  Tem que fazer parte de todas as unique e clustered indexes.
  Tem que fazer parte de todas as chaves estrangeiras para outras
  federated tables.
Regras
Schema
 Todas as chaves estrangeiras entre federated tables têm que
 conter a chave da federação
 Não podem existir reference tables com chaves estrangeiras para
 uma federated table
 Uma federated table pode ter chaves estrangeiras para reference
 tables sem restrições
 Só poderão ser realizadas alteração ao esquema de um membro
 através de ligações sem filtro (FILTERING=OFF)
Regras

Os membros da federação não suportam:
  Index Views
  Colunas Identity
  Tipo de dados timestamp e rowversion
DEMO
 SPLIT
SPLIT – 1ª Fase
                                           Member : Range [100,300)
São instanciadas duas novas bases de         ID=110        ID=210

dados                                         ID=120        ID=220
                                                ID=130        ID=230

São criadas as entradas nas tabelas de
metadata que irão suportar o
progresso da operação                      Member :             Member :
                                         Range [100,200)      Range [200,300)
(sys.dm_federation_operation*) e
preparadas as operações de cópia dos
dados
SPLIT – 2ª Fase                 Member : Range [100,300)


                                                ID=110          ID=210


Criação do Schema                                    ID=120

                                                       ID=130
                                                                  ID=220

                                                                    ID=230

Cópia integral dos dados replicados
Cópia filtrada dos dados particionados
Operações acontecem sobre as novas
bases de dados e respectivas réplicas         Member :
                                            Range [100,200)
                                                                      Member :
                                                                    Range [200,300)


Original passa a offline e novas a online   ID=110

                                             ID=120
                                                                           ID=210

                                                                             ID=220

Alteração transparente para o utilizador       ID=130                         ID=230


  alteração na metadata
  retry logic
DEMO
USE FEDERATION
Use Federation
USE FEDERATION ROOT WITH RESET

USE FEDERATION federation_name (distribution_name =
value) WITH FILTERING={ON|OFF}, RESET [;]
  RESET é obrigatório
  FILTERING
    OFF – Acede a todos os dados do federation member
    ON – Acede apenas a dados da unidade atómica definida
Root Database a Bottleneck ?
            Client Layer




        Infrastructure Layer
Root Database a Bottleneck ?
 TDS     Client Layer


       Services Layer
             Gateway
Sessão TDS




Infrastructure Layer
Root Database a Bottleneck ?
DEMO
UTILIZAÇÃO NAS APLICAÇÕES
LINQ

using (DataClasses1DataContext db = new DataClasses1DataContext())
{
   db.Connection.Open();
   db.ExecuteCommand("USE FEDERATION ProdutosFed(ID = 110)
WITH RESET, FILTERING=OFF");

    (…)
}
Entity Framework

using (DemoEntities db = new DemoEntities())
{
  db.Connection.Open();
  db.ExecuteStoreCommand(“USE FEDERATION ProdutosFed(ID = 110)
WITH RESET, FILTERING=OFF”);
(…)
}
Entity Framework – Code First

using (DemoEntities db = new DemoEntities())
{
  ((IObjectContextAdapter)db).ObjectContext.Connection.Open();
  db.ExecuteStoreCommand(“USE FEDERATION ProdutosFed (ID = 110)
WITH RESET, FILTERING=OFF”);
(…)
}
Transacções
using (DemoEntities db = new DemoEntities())
{
  db.Connection.Open();
  db.ExecuteStoreCommand(“USE FEDERATION ProdutosFed(ID = 110) WITH
RESET, FILTERING=OFF”);

  using (TransactionScope scope = new
TransactionScope(TransactionScopeOption.RequiresNew))
  {
  (...)
  }
}
Multiple Active Result Sets (MARS)

Ainda não existe suporte para MARS em SQL Azure Federations

Não pudemos usar Lazy Loading, LoadProperty() e Load()

Temos que fazer Eager Loading
  Inicializar os objectos no momento da criação
Multiple Active Result Sets (MARS)
LINQ
DataLoadOptions dataLoadOptions = new DataLoadOptions();
dataLoadOptions.LoadWith<Produto>(c => c.Categoria);
db.LoadOptions = dataLoadOptions;

Entity Framework
  O eager loading é realizado através do método Include:
var produtos = from p in db.Produto.Include("Categoria1") select p;
Recap

Centralizados            Particionados




   Configs      Dados1      Dados2       Dados3
                  CP          CP           CP



                          Replicados
Recap

Federation Root

                  Federations
                                 Federation Members
   AppDB


                                ClientesFed
Questões?
Patrocinadores
Obrigado!

Contenu connexe

Similaire à SQL Azure Federations

MySQL no Windows: implementação eficiente de novas aplicações
MySQL no Windows: implementação eficiente de novas aplicaçõesMySQL no Windows: implementação eficiente de novas aplicações
MySQL no Windows: implementação eficiente de novas aplicaçõesMySQL Brasil
 
Alta-disponibilidade e alta performance com o MySQL Cluster 7.3
Alta-disponibilidade e alta performance com o MySQL Cluster 7.3Alta-disponibilidade e alta performance com o MySQL Cluster 7.3
Alta-disponibilidade e alta performance com o MySQL Cluster 7.3MySQL Brasil
 
Windows server 2003
Windows server 2003Windows server 2003
Windows server 2003guestdf16d4b
 
MySQL - o banco de dados open source mais popular do mundo
MySQL - o banco de dados open source mais popular do mundoMySQL - o banco de dados open source mais popular do mundo
MySQL - o banco de dados open source mais popular do mundoMySQL Brasil
 
Desenvolvendo para o Windows Azure e SQL Azure
Desenvolvendo para o Windows Azure e SQL AzureDesenvolvendo para o Windows Azure e SQL Azure
Desenvolvendo para o Windows Azure e SQL AzureLuciano Condé
 
Licenciamento SQL - Encontro SQL Server RS
Licenciamento SQL - Encontro SQL Server RSLicenciamento SQL - Encontro SQL Server RS
Licenciamento SQL - Encontro SQL Server RSAna Paula de Almeida
 
MySQL Alta Performance & Alta Disponibilidade
MySQL Alta Performance & Alta DisponibilidadeMySQL Alta Performance & Alta Disponibilidade
MySQL Alta Performance & Alta DisponibilidadeMySQL Brasil
 
MySQL em 10min - Alexandre Almeida HTI Tecnologia
MySQL em 10min - Alexandre Almeida HTI TecnologiaMySQL em 10min - Alexandre Almeida HTI Tecnologia
MySQL em 10min - Alexandre Almeida HTI TecnologiaMySQL Brasil
 
Expremendo performance do sql server
Expremendo performance do sql serverExpremendo performance do sql server
Expremendo performance do sql serverFelipe Ferreira
 
Escalabilidade, as modas, (No)SQL
Escalabilidade, as modas, (No)SQLEscalabilidade, as modas, (No)SQL
Escalabilidade, as modas, (No)SQLFernando Ike
 
Paulo Santanna_Infnet_Migração AD
Paulo Santanna_Infnet_Migração ADPaulo Santanna_Infnet_Migração AD
Paulo Santanna_Infnet_Migração ADInvent IT Solutions
 
Banco de dados distribuídos mnt bd
Banco de dados distribuídos mnt bdBanco de dados distribuídos mnt bd
Banco de dados distribuídos mnt bdM Serafim
 
Desenvolvendo nas nuvens com Windows Azure
Desenvolvendo nas nuvens com Windows AzureDesenvolvendo nas nuvens com Windows Azure
Desenvolvendo nas nuvens com Windows AzureCristian Mathias
 
Instalação, configuração e administração de um SO Cliente/Servidor
Instalação, configuração e administração de um SO Cliente/ServidorInstalação, configuração e administração de um SO Cliente/Servidor
Instalação, configuração e administração de um SO Cliente/ServidorEdgar Costa
 

Similaire à SQL Azure Federations (20)

MySQL no Windows: implementação eficiente de novas aplicações
MySQL no Windows: implementação eficiente de novas aplicaçõesMySQL no Windows: implementação eficiente de novas aplicações
MySQL no Windows: implementação eficiente de novas aplicações
 
Alta-disponibilidade e alta performance com o MySQL Cluster 7.3
Alta-disponibilidade e alta performance com o MySQL Cluster 7.3Alta-disponibilidade e alta performance com o MySQL Cluster 7.3
Alta-disponibilidade e alta performance com o MySQL Cluster 7.3
 
AWS Webinar | Como usar AWS?
AWS Webinar | Como usar AWS?AWS Webinar | Como usar AWS?
AWS Webinar | Como usar AWS?
 
SQL over SMB3
SQL over SMB3SQL over SMB3
SQL over SMB3
 
SQL Server over SMB3
SQL Server over SMB3SQL Server over SMB3
SQL Server over SMB3
 
What's New On Azure IaaS
What's New On Azure IaaSWhat's New On Azure IaaS
What's New On Azure IaaS
 
Windows server 2003
Windows server 2003Windows server 2003
Windows server 2003
 
MySQL - o banco de dados open source mais popular do mundo
MySQL - o banco de dados open source mais popular do mundoMySQL - o banco de dados open source mais popular do mundo
MySQL - o banco de dados open source mais popular do mundo
 
Desenvolvendo para o Windows Azure e SQL Azure
Desenvolvendo para o Windows Azure e SQL AzureDesenvolvendo para o Windows Azure e SQL Azure
Desenvolvendo para o Windows Azure e SQL Azure
 
Voltdb @ NoSQL[br]
Voltdb @ NoSQL[br]Voltdb @ NoSQL[br]
Voltdb @ NoSQL[br]
 
Licenciamento SQL - Encontro SQL Server RS
Licenciamento SQL - Encontro SQL Server RSLicenciamento SQL - Encontro SQL Server RS
Licenciamento SQL - Encontro SQL Server RS
 
MySQL Alta Performance & Alta Disponibilidade
MySQL Alta Performance & Alta DisponibilidadeMySQL Alta Performance & Alta Disponibilidade
MySQL Alta Performance & Alta Disponibilidade
 
MySQL em 10min - Alexandre Almeida HTI Tecnologia
MySQL em 10min - Alexandre Almeida HTI TecnologiaMySQL em 10min - Alexandre Almeida HTI Tecnologia
MySQL em 10min - Alexandre Almeida HTI Tecnologia
 
Expremendo performance do sql server
Expremendo performance do sql serverExpremendo performance do sql server
Expremendo performance do sql server
 
Multitenancy
MultitenancyMultitenancy
Multitenancy
 
Escalabilidade, as modas, (No)SQL
Escalabilidade, as modas, (No)SQLEscalabilidade, as modas, (No)SQL
Escalabilidade, as modas, (No)SQL
 
Paulo Santanna_Infnet_Migração AD
Paulo Santanna_Infnet_Migração ADPaulo Santanna_Infnet_Migração AD
Paulo Santanna_Infnet_Migração AD
 
Banco de dados distribuídos mnt bd
Banco de dados distribuídos mnt bdBanco de dados distribuídos mnt bd
Banco de dados distribuídos mnt bd
 
Desenvolvendo nas nuvens com Windows Azure
Desenvolvendo nas nuvens com Windows AzureDesenvolvendo nas nuvens com Windows Azure
Desenvolvendo nas nuvens com Windows Azure
 
Instalação, configuração e administração de um SO Cliente/Servidor
Instalação, configuração e administração de um SO Cliente/ServidorInstalação, configuração e administração de um SO Cliente/Servidor
Instalação, configuração e administração de um SO Cliente/Servidor
 

Plus de Vitor Tomaz

[Programar2013] Introdução ao Cloud Computing e ao Windows Azure
[Programar2013] Introdução ao Cloud Computing e ao Windows Azure[Programar2013] Introdução ao Cloud Computing e ao Windows Azure
[Programar2013] Introdução ao Cloud Computing e ao Windows AzureVitor Tomaz
 
[24HOP] SQL Server em maquinas virtuais do Windows Azure
[24HOP] SQL Server em maquinas virtuais do Windows Azure[24HOP] SQL Server em maquinas virtuais do Windows Azure
[24HOP] SQL Server em maquinas virtuais do Windows AzureVitor Tomaz
 
[GWAB] Testing Scenarios with Windows Azure and Visual Studio Online
[GWAB] Testing Scenarios with Windows Azure and Visual Studio Online[GWAB] Testing Scenarios with Windows Azure and Visual Studio Online
[GWAB] Testing Scenarios with Windows Azure and Visual Studio OnlineVitor Tomaz
 
Running your Dev&Test environment on the Cloud: Visual Studio Online
Running your Dev&Test environment on the Cloud: Visual Studio OnlineRunning your Dev&Test environment on the Cloud: Visual Studio Online
Running your Dev&Test environment on the Cloud: Visual Studio OnlineVitor Tomaz
 
[NetPonto] NoSQL em Windows Azure Table Storage
[NetPonto] NoSQL em Windows Azure Table Storage[NetPonto] NoSQL em Windows Azure Table Storage
[NetPonto] NoSQL em Windows Azure Table StorageVitor Tomaz
 
Hands on Windows Azure
Hands on Windows AzureHands on Windows Azure
Hands on Windows AzureVitor Tomaz
 
[NetPonto] Arquitectura dos Serviços da plataforma Windows Azure
[NetPonto] Arquitectura dos Serviços da plataforma Windows Azure[NetPonto] Arquitectura dos Serviços da plataforma Windows Azure
[NetPonto] Arquitectura dos Serviços da plataforma Windows AzureVitor Tomaz
 
[.Net Juniors Academy] Introdução ao Cloud Computing e Windows Azure Platform
[.Net Juniors Academy] Introdução ao Cloud Computing e Windows Azure Platform[.Net Juniors Academy] Introdução ao Cloud Computing e Windows Azure Platform
[.Net Juniors Academy] Introdução ao Cloud Computing e Windows Azure PlatformVitor Tomaz
 
[AzurePT] Desenvolvimento para o Windows Azure: Diferença para o developer
[AzurePT] Desenvolvimento para o Windows Azure: Diferença para o developer[AzurePT] Desenvolvimento para o Windows Azure: Diferença para o developer
[AzurePT] Desenvolvimento para o Windows Azure: Diferença para o developerVitor Tomaz
 
[NetPonto] Entity Framework 4 Code-First
[NetPonto] Entity Framework 4 Code-First[NetPonto] Entity Framework 4 Code-First
[NetPonto] Entity Framework 4 Code-FirstVitor Tomaz
 

Plus de Vitor Tomaz (10)

[Programar2013] Introdução ao Cloud Computing e ao Windows Azure
[Programar2013] Introdução ao Cloud Computing e ao Windows Azure[Programar2013] Introdução ao Cloud Computing e ao Windows Azure
[Programar2013] Introdução ao Cloud Computing e ao Windows Azure
 
[24HOP] SQL Server em maquinas virtuais do Windows Azure
[24HOP] SQL Server em maquinas virtuais do Windows Azure[24HOP] SQL Server em maquinas virtuais do Windows Azure
[24HOP] SQL Server em maquinas virtuais do Windows Azure
 
[GWAB] Testing Scenarios with Windows Azure and Visual Studio Online
[GWAB] Testing Scenarios with Windows Azure and Visual Studio Online[GWAB] Testing Scenarios with Windows Azure and Visual Studio Online
[GWAB] Testing Scenarios with Windows Azure and Visual Studio Online
 
Running your Dev&Test environment on the Cloud: Visual Studio Online
Running your Dev&Test environment on the Cloud: Visual Studio OnlineRunning your Dev&Test environment on the Cloud: Visual Studio Online
Running your Dev&Test environment on the Cloud: Visual Studio Online
 
[NetPonto] NoSQL em Windows Azure Table Storage
[NetPonto] NoSQL em Windows Azure Table Storage[NetPonto] NoSQL em Windows Azure Table Storage
[NetPonto] NoSQL em Windows Azure Table Storage
 
Hands on Windows Azure
Hands on Windows AzureHands on Windows Azure
Hands on Windows Azure
 
[NetPonto] Arquitectura dos Serviços da plataforma Windows Azure
[NetPonto] Arquitectura dos Serviços da plataforma Windows Azure[NetPonto] Arquitectura dos Serviços da plataforma Windows Azure
[NetPonto] Arquitectura dos Serviços da plataforma Windows Azure
 
[.Net Juniors Academy] Introdução ao Cloud Computing e Windows Azure Platform
[.Net Juniors Academy] Introdução ao Cloud Computing e Windows Azure Platform[.Net Juniors Academy] Introdução ao Cloud Computing e Windows Azure Platform
[.Net Juniors Academy] Introdução ao Cloud Computing e Windows Azure Platform
 
[AzurePT] Desenvolvimento para o Windows Azure: Diferença para o developer
[AzurePT] Desenvolvimento para o Windows Azure: Diferença para o developer[AzurePT] Desenvolvimento para o Windows Azure: Diferença para o developer
[AzurePT] Desenvolvimento para o Windows Azure: Diferença para o developer
 
[NetPonto] Entity Framework 4 Code-First
[NetPonto] Entity Framework 4 Code-First[NetPonto] Entity Framework 4 Code-First
[NetPonto] Entity Framework 4 Code-First
 

SQL Azure Federations

  • 1. SQL Azure Federations Vítor Tomaz
  • 2. About Me Vítor Tomaz Consultor Independente Email: vitorbstomaz@gmail.com Twitter: @vitortomaz
  • 4. Agenda SQL Azure Database Overview Escalabilidade Conceitos Utilização nas aplicações
  • 5. SQL Azure Database Overview Account Cada conta tem 0 ou mais servidores lógicos Criada através do portal Cada servidor lógico tem uma ou mais bases de dados Contém informações aceca das base de dados e consumos Server Unidade de autenticação, geo-localização, billing, e reporting Nome gerado automáticamente Uma base de dados tem objectos SQL Database Utilizadores, Tabelas, Views, Indices, etc Unidade de consistência
  • 6. SQL Azure Database Overview Web Edition Business Edition 1Gb 5Gb 10Gb 20,30,40,50,100 150Gb
  • 7. SQL Azure Database Overview Três Uma Base de Dados Base de Dados Físicas Lógica Primary Secondary 1 DB Secondary 2
  • 8. Escalabilidade Escalabilidade Elasticidade Baixo Investimento Inicial Pago o que Uso Não há (demasiados) recursos desperdiçados
  • 9. Escalabilidade Scale Out 150Gb SQL Compute SQL Azure Azure Scale Up Scale Out
  • 10. SQL Azure Architecture Client Layer Infrastructure Layer
  • 11. SQL Azure Architecture Platform Layer Node 14 SQL Server Instance SQL Server DB User User User User DB1 DB2 DB3 DB4 SQL Azure Fabric Node 15 SQL Server Instance SQL Server DB User User User User DB1 DB2 DB3 DB4 SQL Azure Fabric
  • 12. Multi-tenant Uma base de dados por tenant Custo mínimo por tenant 9.99$ Tudo numa base de dados Limite de capacidade de processamento Limitado a 150Gb
  • 13. Sharding PartitionKey PartitionKey RowKey RowKey Timestamp Timestamp ModelYear ModelYear (Category) (Category) (Title) (Title) Bikes Super Duper Cycle … 2009 Bikes Quick Cycle 200 Deluxe … 2007 … … … … … … … … Canoes Canoes Whitewater Whitewater … … 2009 2009 Canoes Flatwater … 2006 Canoes Flatwater … 2006 PartitionKey Rafts RowKey 14ft Super Tourer …Timestamp ModelYear 1999 (Category) (Title) … Rafts … 14ft Super Tourer … … … 1999 Skis … Fabrikam Back Trackers … …… 2009 … … Skis … Fabrikam Back Trackers …… … 2009 … Tents … Super Palace …… … 2008 Tents Super Palace … 2008
  • 14. Sharding Sharding de uma base de dados Sharding numa aplicação multi-tenant
  • 15. Distribuição dos dados Centralizados Disponíveis num único local Centralizados Particionados Poucas leituras e escritas Particionados Configs Dados1 Dados2 Dados3 Cada “pedaço” reside apenas CP CP CP numa base de dados Replicados Replicados Leituras Escritas são raras
  • 16. Arquitectura Federation Root contêm todas as Federation Root informações sobre o particionamento dos Federations dados Federation Members AppDB Federations objectos que suportam a funcionalidade de ClientesFed distribuição dos dados entre as várias partições
  • 17. Arquitectura Federation Member Instância de SQL Azure Federation Key Federation Key Member : Range [100,300] campo que identifica univocamente ID=110 ID=210 cada partição Unidades ID=120 ID=220 Atómicas Unidades Atómicas ID=130 ID=230 conjunto de dados com a mesma federation key ficam garantidamente no mesmo federation member
  • 18. DEMO Criação de uma Federação
  • 19. Regras CREATE FEDERATION nome_federacao (nome_distribuicao <tipo> RANGE) Nome da federação têm que ser único dentro de uma base de dados Tipo de dados terá que ser INT, BIGINT, UNIQUEIDENTIFIER ou VARBINARY(n) onde o n poderá ir até 900
  • 20. Regras Dados Centralizados Criados na root database Dados Particionados (federados) Criados no federation member Com o atributo FEDERATED ON () Dados Replicados Criados no federation member Sem o atributo FEDERATED ON ()
  • 21. Regras CREATE TABLE Produto(…) FEDERATED ON (ID=ProdutoID) O tipo de dados desta coluna tem que ser obrigatoriamente igual ao tipo de dados da chave da federação. Não pode ter valor nulo. Não pode ser actualizada para valores fora do range do membro actual. Não pode ser uma computed column. Tem que fazer parte de todas as unique e clustered indexes. Tem que fazer parte de todas as chaves estrangeiras para outras federated tables.
  • 22. Regras Schema Todas as chaves estrangeiras entre federated tables têm que conter a chave da federação Não podem existir reference tables com chaves estrangeiras para uma federated table Uma federated table pode ter chaves estrangeiras para reference tables sem restrições Só poderão ser realizadas alteração ao esquema de um membro através de ligações sem filtro (FILTERING=OFF)
  • 23. Regras Os membros da federação não suportam: Index Views Colunas Identity Tipo de dados timestamp e rowversion
  • 25. SPLIT – 1ª Fase Member : Range [100,300) São instanciadas duas novas bases de ID=110 ID=210 dados ID=120 ID=220 ID=130 ID=230 São criadas as entradas nas tabelas de metadata que irão suportar o progresso da operação Member : Member : Range [100,200) Range [200,300) (sys.dm_federation_operation*) e preparadas as operações de cópia dos dados
  • 26. SPLIT – 2ª Fase Member : Range [100,300) ID=110 ID=210 Criação do Schema ID=120 ID=130 ID=220 ID=230 Cópia integral dos dados replicados Cópia filtrada dos dados particionados Operações acontecem sobre as novas bases de dados e respectivas réplicas Member : Range [100,200) Member : Range [200,300) Original passa a offline e novas a online ID=110 ID=120 ID=210 ID=220 Alteração transparente para o utilizador ID=130 ID=230 alteração na metadata retry logic
  • 28. Use Federation USE FEDERATION ROOT WITH RESET USE FEDERATION federation_name (distribution_name = value) WITH FILTERING={ON|OFF}, RESET [;] RESET é obrigatório FILTERING OFF – Acede a todos os dados do federation member ON – Acede apenas a dados da unidade atómica definida
  • 29. Root Database a Bottleneck ? Client Layer Infrastructure Layer
  • 30. Root Database a Bottleneck ? TDS Client Layer Services Layer Gateway Sessão TDS Infrastructure Layer
  • 31. Root Database a Bottleneck ?
  • 33. LINQ using (DataClasses1DataContext db = new DataClasses1DataContext()) { db.Connection.Open(); db.ExecuteCommand("USE FEDERATION ProdutosFed(ID = 110) WITH RESET, FILTERING=OFF"); (…) }
  • 34. Entity Framework using (DemoEntities db = new DemoEntities()) { db.Connection.Open(); db.ExecuteStoreCommand(“USE FEDERATION ProdutosFed(ID = 110) WITH RESET, FILTERING=OFF”); (…) }
  • 35. Entity Framework – Code First using (DemoEntities db = new DemoEntities()) { ((IObjectContextAdapter)db).ObjectContext.Connection.Open(); db.ExecuteStoreCommand(“USE FEDERATION ProdutosFed (ID = 110) WITH RESET, FILTERING=OFF”); (…) }
  • 36. Transacções using (DemoEntities db = new DemoEntities()) { db.Connection.Open(); db.ExecuteStoreCommand(“USE FEDERATION ProdutosFed(ID = 110) WITH RESET, FILTERING=OFF”); using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew)) { (...) } }
  • 37. Multiple Active Result Sets (MARS) Ainda não existe suporte para MARS em SQL Azure Federations Não pudemos usar Lazy Loading, LoadProperty() e Load() Temos que fazer Eager Loading Inicializar os objectos no momento da criação
  • 38. Multiple Active Result Sets (MARS) LINQ DataLoadOptions dataLoadOptions = new DataLoadOptions(); dataLoadOptions.LoadWith<Produto>(c => c.Categoria); db.LoadOptions = dataLoadOptions; Entity Framework O eager loading é realizado através do método Include: var produtos = from p in db.Produto.Include("Categoria1") select p;
  • 39. Recap Centralizados Particionados Configs Dados1 Dados2 Dados3 CP CP CP Replicados
  • 40. Recap Federation Root Federations Federation Members AppDB ClientesFed

Notes de l'éditeur

  1. Slide ObjectiveUse this slide to transition into an explanation of SQL Azure Database (Reporting and Data Sync will be covered later)Explain at a high level how SQL Azure worksSpeaker NotesDesign Principle of SQL Azure: Focus on combining the best features of SQL Server running at scale with low frictionSQL Azure is a high availability databaseAlways three transaction consistent replicas of the databaseOne primary replica; two slave replicasFailure of a replica will result in another replica being spun up immediately by the fabricFailure of the primary replica means a slave replica will become the primary and a new slave will spin upMinimal down timeTypically just a few dropped connectionsEasy to code for the failover scenario- if you are ding god connection management and error handling will be fineClustered index required on all tables to allow replicationNotesUseful article from SQL Azure teamhttp://msdn.microsoft.com/en-us/magazine/ee321567.aspx
  2. What about this? Draw answer on slide, highlight all storage points &amp; internal endpointsALSO talk about other tricks such as putting static content into blob storage.Note we don’t talk about CDN here – we’ll cover that in thinking globally