Bases de Dados Distribuídas - Dei-Isep

Propaganda
Bases de Dados Distribuídas
Projecto do 5º Ano da Licenciatura em Engenharia Informática
Ramo de Computa do re s e S iste mas
Ana be la da Costa V ie ira
Orientador: Alexandre B ragança
Setembro de 2002
Bases de Dados Distribuídas
Agradecimentos
Antes de tudo, quero agradecer aos meus pais por me terem ensinado o valor
do trabalho e do estudo e à minha família (principalmente à minha irmã) pelo apoio
que sempre me deu. Quero também agradecer ao Paulo Sousa pelo apoio e
compreensão.
Para a realização deste trabalho não posso deixar de agradecer ao Engº
Alexandre Bragança pela sua orientação e preocupação em indicar o caminho certo;
ao Engº Miguel Oliveira pela sua disponibilidade a fornecer informações (não
conseguiria fazer o exemplo prático sem a sua ajuda!) sempre que surgiam dúvidas.
iii
Bases de Dados Distribuídas
Índice
AGRADECIMENTOS .......................................................................................................................................III
ÍNDICE.....................................................................................................................................................................V
ÍNDICE DE FIGURAS .....................................................................................................................................VII
ÍNDICE DE TABELAS ..................................................................................................................................VIII
1. INTRODUÇÃO ....................................................................................................................................................1
1.1. Introdução...............................................................................................................................................1
1.2. Estrutura do Relatório...........................................................................................................................2
2. BASES DE DADOS DISTRIBUÍDAS...................................................................................................................5
2.1. Antecedentes das Bases de Dados Distribuídas................................................................................5
2.2 Definição de Bases de Dados Distribuídas...................................................................................... 11
2.3. Regras de uma Base de Dados Distribuída.................................................................................... 17
2.4. Replicação e Fragmentação de Dados............................................................................................ 21
2.4.1. Replicação de Dados........................................................................................................................22
2.4.2 Fragmentação de Dados ....................................................................................................................28
2.4.3. Alocação...........................................................................................................................................34
2.5 Gestão distribuída de transacções .................................................................................................... 35
2.5.1 Protocolos de segurança....................................................................................................................37
2.5.2 Controlo de Concorrência.................................................................................................................39
2.6 Processamento distribuído de questões............................................................................................ 42
2.6.1 Passos do processamento distribuído de questões ............................................................................44
2.7 Bases de Dados Distribuídas Móveis................................................................................................ 51
2.8 Recentes avanços na tecnologia das BDD ....................................................................................... 58
3. O M ICROSOFT SQL SERVER.........................................................................................................................63
3.1 Replicação no Microsoft SQL Server................................................................................................ 64
3.2 Fragmentação no Microsoft SQL Server ......................................................................................... 67
3.3 Transacções no Microsoft SQL Server ............................................................................................. 70
3.4 Processamento Distribuído de Questões no Microsoft SQL Server ............................................ 71
4. O CASO GIS M EDIADORES ...........................................................................................................................73
5. CONCLUSÕES ..................................................................................................................................................79
BIBLIOGRAFIA ................................................................................................................................................. 81
GLOSSÁRIO ........................................................................................................................................................ 83
ÍNDICE REMISSIVO........................................................................................................................................ 85
v
Bases de Dados Distribuídas
SIGLAS .................................................................................................................................................................. 87
ANEXOS ................................................................................................................................................................ 89
A1 - CORBA ................................................................................................................................................. 89
A2 - COM ..................................................................................................................................................... 93
A3 - ODBC ................................................................................................................................................... 98
A4 - X Open DTP ........................................................................................................................................ 99
A5 - Regras de Transformação Algébrica............................................................................................101
vi
Índice de Figuras
FIGURA 1 : O RGANIZAÇÃO DE UM SISTEMA DE GESTÃO DE FI CHEIROS ......................................................................5
FIGURA 2 : O RGANIZAÇÃO DE UMA BASE DE DADOS ...................................................................................................7
FIGURA 3 : A FLEXIBILIDADE DE FU NCIONAMENTO DA ARQUITECTURA CLIENTE / SERVIDOR ...................................8
FIGURA 4 : CONFIGURAÇÕES REPRESENTATIVAS DOS SISTEMA S CLIENTE / SERVIDOR ..............................................9
FIGURA 5: A ARQUITECTURA FÍSICA DE UMA BDD ...................................................................................................12
FIGURA 6 – DEADLOCK GLOBAL: NENHUM NÓ O CONSEGUE DETECTAR UTILIZANDO APENAS .................................20
FIGURA 7 : MÉTODO CONSENSUAL DE QUORUM ........................................................................................................27
FIGURA 8 : GRÁFICO DE J OIN PARTICIONADO...........................................................................................................31
FIGURA 9 : EXECUÇÃO DE UMA TRANSACÇÃO DISTRIBUÍDA .....................................................................................35
FIGURA 10 : PROTOCOLO 2PC ..................................................................................................................................37
FIGURA 11 : FASES DO TWO-PHASE L OCKING ............................................................................................................40
FIGURA 12 : ÁRVORE DE ANÁLISE ALG ÉBRICA..........................................................................................................45
FIGURA 13 : ÁRVORE DE ANÁLISE ALG ÉBRICA REESTRUTURADA .............................................................................46
FIGURA 14 : O PTIMIZAÇÃO DE UM INQUÉRITO SEGUINDO A PR IMEIRA REGRA DE REDU ÇÃO...................................47
FIGURA 15 : ÁRVORE DE ANÁLISE ALG ÉBRICA..........................................................................................................48
FIGURA 16 : EXEMPLO DO TIPO DE CÉLULAS EXISTENTES NUMA REDE MÓVEL ........................................................53
FIGURA 17: MODELO DOS O BJECTOS DA RELAÇÃO O BRA -EMPREGADOS ...............................................................60
FIGURA 18 : DIFERENTES TIPOS DE REPLICAÇÃO EM TERMOS DE AUTONOMIA DOS NÓS E CONSISTÊNCIA
TRANSACCIONAL..............................................................................................................................................67
FIGURA 19 : PUBLICAÇÕES EXISTENTE S NO SERVIDOR .............................................................................................74
FIGURA 20 : PROPRIEDADES DE UMA PUBLICAÇÃO ...................................................................................................75
FIGURA 21 : O REPLICATION C ONFLICT VIEWER AJUDA À VISUALIZAÇÃO DOS CONFLITOS EXISTENTES DURANTE A
FASE DE JUNÇÃO DAS BDS. ..............................................................................................................................76
FIGURA 22 : ARQUITECTURA DO MODELO DE REFERÊNCIA DA OMG.....................................................................89
FIGURA 23: ARQUITECTURA CORBA ORB .............................................................................................................90
FIGURA 24: CLIENTE A UTILIZAR UMOBJECTO COM ATRAVÉS DE UM APONTADOR PARA UM INTERFACE............94
FIGURA 25: O BJECTO COM RELÓGIO ......................................................................................................................95
FIGURA 26: TRÊS MÉTODOS PARA ACEDER A OBJECTOS COM ................................................................................96
FIGURA 27 : ARQUITECTURA DO ODBC ...................................................................................................................98
FIGURA 28: INTERACÇÕES ENTRE CLI ENTE, TM AND SERVIDOR COM O PROTOCOLO X-OPEN DTP ..................100
FIGURA 29 : ÁRVOR E DE ANÁLISE ALGÉBRICA ......................................................................................................102
FIGURA 30: ÁRVORE DE ANÁLISE ÁLGÉBRICA .......................................................................................................103
Bases de Dados Distribuídas
Índice de Tabela s
TABELA 1 : TABELA EMPREG
DA FIRMA DE C ONSTRUÇÃO C IVIL .........................................................................21
TABELA 2 : TABELA CARGO....................................................................................................................................22
TABELA 3 : TABELA LOCALIZACAO ....................................................................................................................22
TABELA 4 : TABELA OBRA.......................................................................................................................................22
TABELA 5 : FRACCIONAMENTO HORIZONTAL DA TABELA DE EMPREGADOS ..........................................................28
TABELA 6 : FRACCIONAMENTO VERTICAL DA TABELA DE EMPREGADOS ...............................................................28
TABELA 7 : FRACCIONAMENTO MISTO DA TABELA DE EMPREGADOS .....................................................................29
TABELA 8 : FRAGMENTAÇÃO DERIVADA DA TABELA OBRA ....................................................................................29
TABELA 9: Nº DE INQUÉRITOS EFECTUADOS POR NÓ.................................................................................................33
TABELA 10: MATRIZ DE UTILIZAÇÃO DE ATRIBUTOS................................................................................................33
TABELA 11: INICIALIZAÇÃO DA MATR IZ DE AFINIDADES ENTRE ATRIBUTOS ...........................................................33
TABELA 12 : ALGORITMOS DE OPTIMIZAÇÃO DE INQUÉRITOS DISTRIBUÍDOS ..........................................................49
TABELA 13: PRODUTOS BDD E SUAS CARACTERÍSTI CAS MAIS IMPORTANTES..........................................................64
viii
Introdução
1. Int roduç ão
1.1. Introdução
Este relatório debruça-se sobre “Bases de Dados Distribuídas”. Mas, porquê
este tema? Estamos num sociedade de informação e, para armazenar essa mesma
informação, devemos ter bases de dados seguras, fiáveis e permanentemente
disponíveis. Existem milhares de empresas a nível mundial. Quando existe uma fusão,
que alternativas temos? Inutilizar uma das bases de dados, copiando apenas a sua
informação para a outra? Nos dias que correm, isso seria impraticável; logo, a melhor
solução é juntá- las de uma maneira o mais transparente possível para o utilizador
final.
Com este relatório pretende-se, além de lançar alguma luz sobre um tema tão
vasto (e em constante alteração com os avanços nesta área), apresentar uma solução
possível para um caso concreto, no âmbito da empresa I2S SA – Informática,
Sistemas e Seguros.
A I2S é uma empresa que nasceu em 1984 com o objectivo de criar soluções
informáticas para a actividade seguradora e que se tem vindo a implantar no mercado
com o GIS (Gestão Integrada de Seguros), uma solução flexível, global e integrada.
O GIS divide-se em vários módulos, entre eles o GIS Mediadores. Este
módulo é um interface de gestão de seguros contendo vários sub- módulos, integráveis
consoante as necessidades do mediador de seguros. Entre estes podemos referir o submódulo da carteira, cuja finalidade é a gestão de apólices e propostas de seguro e o
sub- módulo da cobrança, cuja finalidade é a gestão dos recibos das apólices e sua
liquidação. Integrada no GIS Mediadores existe uma base de dados que contém os
dados necessários para o mediador poder trabalhar. As condições de trabalho dos
mediadores de seguros são muito peculiares: podem trabalhar para apenas uma ou
mais seguradoras em agências tipicamente distantes da sede da seguradora. Por
1
Bases de Dados Distribuídas
exemplo, um mediador tem a sua sede em Lisboa, uma filial de média dimensão no
Porto e depois, espalhados pelo país, uma série de escritórios de sub-mediadores. Aqui
põe-se o problema: como manter actualizadas quer a base de dados da sede, quer a da
filial, quer as dos vários sub-mediadores? Temos também de ter em atenção que o
mediador pode não precisar de ter informação sobre todos os clientes da seguradora,
mas apenas sobre aqueles com os quais lida. Provavelmente, também não precisará de
toda a informação de que a seguradora dispõe, bastando- lhe alguns dados mais
importantes. E se o mediador tiver apenas um portátil como ferramenta de trabalho?
No final deste documento, o objectivo será ter alcançado uma solução possível
e viável para um caso tão desafiador.
1.2. Estrutura do Relatório
Por razões de lógica e ordem de ideias começaremos por ver conceitos de
Bases de Dados Distribuídas 1 , suas vantagens e desvantagens. O problema da
replicação de dados será alvo de especial atenção, assim como a fragmentação e
alocação de dados, a gestão distribuída de transacções e a optimização de inquéritos
distribuídos. Também serão abordados os mais recentes avanços, nomeadamente a
mobilidade das bases de dados (possível com o advento dos portáteis), e o modelo
orientado ao objecto.
Seguidamente, iremos comparar alguns sistemas de BDD. O Microsoft SQL
Server, o Oracle Server e a Sybase são alguns exemplos. Como representante das
BDD orientadas ao objecto, mencionar-se-á a Objectivity DB. O Microsoft SQL
Server estará em maior destaque, devido à enorme disseminação que tem tido nos
últimos anos2 , sendo que a maioria das empresas as utiliza, e os clientes do GIS
Mediadores não serão, certamente, uma excepção.
Um cenário possível de distribuição de dados será depois apresentado em
maior pormenor como exemplo da interligação de várias delegações e agentes
dispersos geograficamente. Tentar-se-á também apresentar uma proposta de solução
para esse mesmo cenário.
No final, serão apresentadas as conclusões atingidas.
1
De agora em diante serão designadas por BDD.
2
Ao qual o facto de esta tecnologia ser da patente da Microsoft não será alheio.
2
Introdução
3
Bases de Dados Distribuídas
4
Bases de Dados Distribuídas
2. Bases de Dados Di st ribu íd as
2.1.
Antecedentes
das
Bases
de
Dados
Distribuídas
Nos dias que correm, a informação é considerada o bem mais precioso de uma
organização. Informação permanentemente actual, correcta e relevante contribui para
uma maior competitividade, o que, num mundo empresarial com níveis de
concorrência nunca antes atingidos, pode significar a diferença entre o lucro e o
prejuízo. Para além das características da actualidade, da correcção e da relevância, a
informação deve estar sempre disponível e interpretável, para que possa fazer parte do
processo de tomada de decisão de um modo eficaz.
As Bases de Dados actuais (ainda de um ponto de vista centralizado) tiveram
como antecessores os sistemas de gestão de ficheiros. Estes foram a primeira
abordagem para a resolução do problema da existência de enormes quantidades de
dados numa organização. Tinham por objectivo automatizar algumas tarefas
realizadas manualmente até aí. Porém, os processos eram executados quase da mesma
forma.
Figura 1 : Organização de um sistema de gestão de ficheiros 3
3
M. Tamer Özsu e Patrick Valduriez in Distributed Database Management Systems -
www.csse.monash.edu.au/courseware/cse5200
5
Bases de Dados Distribuídas
Estes sistemas encontravam-se demasiado próximos dos fluxos de informação
das organizações (onde o mesmo documento pode ter vários processamentos
diferentes), e como resultado, os mesmos dados podiam ser armazenados em ficheiros
diferentes e recolhidos em alturas diferentes e por diferentes aplicações. As
incoerências e as redundâncias tornaram-se inevitáveis. Os problemas adicionais de
manutenção destes sistemas ao nível das aplicações e do acesso aos dados ditou a sua
substituição pelas Bases de Dados 4 .
Ao contrário do que sucede num sistema de ficheiros, os dados de uma BD são
organizados num único conjunto. Além disso, o acesso físico à BD é feito por um
Sistema de Gestão de Base de Dados 5 , e as aplicações têm apenas uma interface
lógica com este SGBD. Um SGBD é um conjunto de software destinado a gerir todo
o armazenamento e manipulação dos dados do sistema, fazendo a interface entre o
nível aplicacional e a BD propriamente dita.
Os termos “relacional”, “rede” ou “hierárquica” referem-se ao modo como o
SGBD organiza a informação internamente, organização essa que afecta a velocidade
e a flexibilidade com que o utilizador acede à informação. A BD armazena também,
além dos dados, a sua descrição (metadados) num dicionário de dados que ajuda a
interpretar a estrutura dos dados armazenados, disponibilizando ao nível aplicacional
uma interface lógica.
A modelação de dados é uma actividade fundamental para a tecnologia das
BDs. O seu objectivo é tentar encontrar um modelo que traduza a estrutura lógica dos
dados e, ao mesmo tempo, que satisfaça os requisitos de informação destes sistemas.
Os diagramas E-R são uma abordagem largamente difundida para ajudar à criação do
modelo conceptual de dados. Estes explicitam de uma forma clara as entidades
existentes no sistema e as relações entre elas, juntamente com as suas cardinalidades.
4
De agora em diante serão designadas por BD.
5
De agora em diante serão designadas por SGBD
6
Bases de Dados Distribuídas
Figura 2 : Organização de uma base de dados 6
A evolução seguinte foi a arquitectura cliente / servidor, que surgiu com a
possibilidade de interligação de computadores pessoais em rede (LAN). Falamos já,
portanto, de um modelo não centralizado. A característica fundamental destes
sistemas é a divisão do processamento global entre as máquinas-cliente, responsáveis
pelas tarefas de front-end com os utilizadores (ou seja, que correm o nível
aplicacional), e as máquinas-servidor, responsáveis pelas tarefas de gestão e
manipulação da BD.
A relação entre os processos cliente e servidor é mostrada na figura 3. Um
utilizador pode invocar um processo cliente (seleccionando um link num Web
browser, por exemplo) e envia um pedido a um processo servidor (seta nº 1). Se o
servidor está configurado para responder a esse pedido, pode fazê-lo directamente
(seta nº 2). Alternativamente, o pedido do cliente original pode envolver pedidos
adicionais a outros servidores (seta nº 3): por exemplo, informação a ser extraída de
uma BD localizada noutro ponto. Assim, um software servidor pode tornar-se um
software cliente, recebendo respostas de outros servidores secundários (seta nº 4).
Outra opção seria o servidor invocar uma aplicação local para que esta respondesse a
um pedido de serviço (seta nº 5), tal como refrescar uma BD ou enviar um e-mail e
depois enviar os resultados (seta nº 6). Outros serviços, ainda, podem ser pedidos
(seta nº 7), e o respectivo retorno será enviado para outros clientes (seta nº 8).
7
Bases de Dados Distribuídas
1
CLIENTE
APLICAÇÃO
1
22
88
SERVIDOR
CLIENTE
55
3
77
SERVIDOR
66
3
44
SERVIDOR
Figura 3 : A flexibilidade de funcionamento da arquitectura cliente / servidor 7
Ao contrário dos sistemas tradicionais, a comunicação entre clientes e
servidores não tem estados – o servidor não precisa de ter consciência do cliente que
lhe está a enviar o pedido. Este tipo de comunicação (sem o estabelecimento de
conexões) representada pelas setas na figura anterior é utilizada na Internet e fornece
uma vasta gama de opções de design aos gestores da info rmação.
A estrutura cliente/servidor, o funcionamento da Internet e a grande variedade
de protocolos servidores que entretanto foram disponibilizados, oferecem uma grande
flexibilidade ao desenho e implementação de sistemas de informação poderosos. Uma
representação desta gama de escolhas é representada na Fig. 2.4. O cliente de cada
uma das cinco possibilidades de implementação de design fornece o interface (Gestão
do Interface) de cada sistema. Do mesmo modo, o servidor fornece serviços de dados
(Gestão de Dados), desde documentos estáticos até resultados de um inquérito à base
de dados. Dependendo das necessidades específicas de cada aplicação, componentes
adicionais podem ser incluídos, quer no cliente quer no servidor, para alcançar
determinadas lógicas de comunicação e facilidades de gestão de dados ou de
interface. As setas bidireccionais mais pequenas representam comunicação com
representação de estados entre os sistemas componentes, tal como a que pode ocorrer
num único host. As setas maiores representam comunicação sem representação de
estados via Internet.
6
M. Tamer Özsu e Patrick Valduriez in Distributed Database Management Systems -
www.csse.monash.edu.au/courseware/cse5200
8
Bases de Dados Distribuídas
Numa BDD, como se pode depreender pela figura, a gestão dos dados é
dividida entre o servidor e o cliente, enquanto a lógica da aplicação e a gestão do
interface são da inteira responsabilidade deste último. No outro extremo estão os
sistemas distribuídos, onde os servidores gerem os dados, a lógica da aplicação e uma
parte do interface, enquanto o cliente apenas tem de gerir uma outra parte do
interface.
LADO CLIEN TE
GESTÃO DO
GESTÃO DO
GESTÃO DO
GESTÃO DO
GESTÃO DO
INTERFACE
INTERFACE
INTERFACE
INTERFACE
INTERFACE
LÓGICA DA
LÓGICA DA
LÓGICA DA
APLICAÇÃO
APLICAÇÃO
APLICAÇÃO
5
GESTÃO
4
DOS DADOS
GESTÃO DO
3
INTERFACE
2
1
LÓGICA DA
LÓGICA DA
LÓGICA DA
APLICAÇÃO
APLICAÇÃO
APLICAÇÃO
GESTÃO
GESTÃO
GESTÃO
GESTÃO
GESTÃO
DOS DADOS
DOS DADOS
DOS DADOS
DOS DADOS
DOS DADOS
LADO SERVIDOR
BASES DE
GESTÃO
LÓGICA
APRESENTAÇÃO
SISTEMAS
DADOS
REMOTA DE
DISTRIBUÍDA
REMOTA
DISTRIBUÍDOS
DISTRIBUÍDAS
DADOS
Figura 4 : Configurações representativas dos sistemas cliente / servidor 8
7
Jeff R.Wright, German Gavilan, Yiguo Zhang e Kamie Redinbo in Emerging Technologies for
Developing Distributed Database Systems – http://bridge.ecn.purdue.edu/~yiguo/dropbox/w2000.pdf
8
Ensor e Stevenson, 1997, in Jeff R.Wright, German Gavilan, Yiguo Zhang e Kamie Redinbo in
Emerging
Technologies
for
Developing
Distributed
Database
Systems
–
http://bridge.ecn.purdue.edu/~yiguo/dropbox/w2000.pdf
9
Bases de Dados Distribuídas
Em determinada altura no tempo começou-se a perceber que as máquinas não
precisavam de ser apenas clientes e servidores, mas pares que podem colaborar no
cumprimento de determinadas tarefas. Foi a partir desse momento que o termo BDD
se difundiu. Uma BDD é então, um conjunto de vários servidores de BDs que podem
funcionar autonomamente, mas também em colaboração com outros servidores de
SGBD remotos, pedindo e/ou fornecendo dados e mantendo-os consistentes.
De entre as razões que levaram à utilização de BDDs destacam-se, então, as
seguintes:
?
Desempenho melhorado – Considere-se uma rede com 10 postos e um
servidor. As 10 estações podem processar, cada uma, 10 milhões de instruções
por segundo (MIPS) e o servidor pode processar 25 MIPS. Usando o modelo
centralizado estaríamos a desperdiçar a maior parte dos 100 MIPS de poder de
computação dos postos. Adicionando mais postos, apenas pioraríamos o
problema, pois mais postos significam uma maior carga para o servidor, sem
adicionar recursos utilizáveis. Esta arquitectura rapidamente se transforma
num gargalo de performance;
?
Reflectir o estado distribuído de uma organização – no caso de organizações
espalhadas por zonas geograficamente distantes, com necessidade de uma
coordenação comum;
?
Por necessidades de crescimento – quando a dimensão e o crescimento de
algumas organizações invalidam a possibilidade de colocar toda a BD numa
mesma máquina;
?
Natureza distribuída de algumas aplicações;
?
Maior disponibilidade e confiabilidade – já que não dependemos de uma única
BD);
?
Permitir a partilha de dados enquanto se mantém algum controlo local;
?
Devido ao aparecimento de novos paradigmas e novos modelos – WWW
fornecedores de serviços distribuídos, Java, CORBA...
Uma nova arquitectura tem emergido, em contraponto às BDDs: a arquitectura
em cluster. Esta difere da arquitectura das BDDs num aspecto fulcral, o acesso à base
10
Bases de Dados Distribuídas
de dados em si, às suas tabelas. Um cluster é constituído por vários servidores, uma
rede e um subsistema de discos partilhados. Não há necessidade de replicação ou
fragmentação, uma vez que os dados estão à disposição de todos os nós. Existe apenas
um dicioná rio de dados e uma única imagem do sistema, comum a todos os seus
elementos. Um cluster é, portanto, mais fácil de gerir do que uma BDD, porém, se os
nós se encontrarem geograficamente distantes, o acesso aos dados pode tornar-se
muito lento. A outra alternativa seria instalar uma rede de comunicação dedicada de
(talvez) centenas ou milhares de quilómetros: algo impraticável, afinal.
2.2 Definição de Bases de Dados Distribuídas
O que é, então, uma Base de Dados Distribuída?
No livro de José Luís Pereira, Tecnologia de Bases de Dados, pode ler-se:
“Por definição, uma base de dados distribuída é um sistema de bases de dados cujos
dados se encontram fisicamente dispersos por várias máquinas, ligadas por meios de
comunicação, mas integrados logicamente”.
Segundo a Prof. Isabel M. Besembel Carrera, da Universidade dos Andes, na
Venezuela (sistemas.ing.ula.ve), “uma BD distribuída é uma colecção de várias BDs
logicamente interrelacionadas sobre uma rede de computadores. Os utilizadores têm
acesso integrado e transparente a uma colecção de BDs (1980). Actualmente, uma
BDD é uma colecção de BDs independentes ou federadas, onde cada sistema tem
facilidades para partilhar dados e serviços com os outros membros”.
Já na Webopedia.com, “uma BDD consiste em dois ou mais ficheiros de dados
localizados em diferentes locais de uma rede de dados. Porque a BD é distribuída,
diferentes utilizadores podem aceder a ela sem interferirem uns com os outros. No
entanto, o SGBD deve periodicamente sincronizar as BDs espalhadas de maneira a
que os dados permaneçam consistentes.”
Estas três definições focam alguns dos aspectos mais importantes das BDDs,
como a localização dispersa dos dados, a fragmentação e duplicação dos mesmos, o
controlo de acessos, entre outros.
11
Bases de Dados Distribuídas
Os termos “BDs logicamente interrelacionadas” ou “dados integrados
logicamente” devem ser bem vincados. Os dados contidos nas várias BDs devem ser
estruturados, isto é, fariam sentido se estivessem numa única BD centralizada. De
facto, um conjunto de páginas Web em diferentes máquinas, mas contendo material
sobre um determinado assunto, não pode ser considerado uma BDD, porque os seus
dados são, no máximo, semi-estruturados.
Os diferentes nós que constituem a BDD devem ser autónomos, isto é, devem
ser capazes de executar programas, e operações e transacções na BD sem suporte
externo.
Também, se não existirem transacções globais (transacções que envolvem
mais do que um nó), a BDD não pode ser considerada como tal, mas apenas como
uma colecção de BDs ligadas por uma rede.
Figura 5: A arquitectura física de uma BDD
Para melhor se poder compreender a tecnologia das BDD, importa, primeiro,
dividir os sistemas de BDD em duas classes: homogéneas e heterogéneas.
Na primeira classe, todos os nós utilizam o mesmo SGBD e têm as mesmas
aplicações instaladas, fazendo lembrar um único sistema de BD, mas em que os dados
estão armazenados em vários repositórios ligados por meios de comunicação. O
12
Bases de Dados Distribuídas
design do tipo top-down está intimamente ligado a estes sistemas. Como é lógico, é
mais usual, ao fazer o desenho dos sistemas a partir do nada, considerar-se que todas
as máquinas serão idênticas. Estas classes de BDD podem oscilar entre vários graus
de autonomia local. Este termo indica o modo como o sistema parece trabalhar, a
partir da perspectiva dos utilizadores e dos programadores. Tome-se como exemplo
um sistema com pouca ou nenhuma autonomia, onde todos os pedidos são enviados
para um nó central, chamado gateway. Daqui, estes são enviados para o nó que
contém a informação ou para a aplicação requerida. Esta situação ocorre com alguma
frequência na Internet, nos sites “espelho” de localizações populares para aumentar a
velocidade de acesso, já que vários nós podem conter a mesma informação e as
mesmas aplicações, de forma a melhorar o fluxo e os tempos de acesso. A
desvantagem do gateway é que este tem de possuir uma conexão à rede bastante larga
e muito poder de processamento para conseguir satisfazer os pedidos e os
encaminhamentos dos dados dos nós para os utilizadores.
Já nos sistemas heterogéneos, os nós utilizam SGBDs diferentes. Estes tanto
podem ser baseados no mesmo modelo de dados, como em modelos de dados
diferentes. Duas organizações diferentes (que a dado ponto da sua história se juntam)
dificilmente utilizarão o mesmo esquema de armazenamento dos dados; por isso, a
abordagem bottom-up está mais ligada a estes sistemas. Também, para incorporar
sistemas legados, esta abordagem é a mais indicada. Aqui, os nós têm um grau de
autonomia muito maior: cada um tem os seus utilizadores, aplicações e dados locais e
lida com estes sozinho, apenas se ligando aos restantes nós para obter informação que
não possui. Este tipo de BDD é muitas vezes chamado de sistema federado ou
federação.
Para que seja possível integrar BDs distintas numa federação de modo a existir
interoperabilidade, ou seja, ser possível trocar informação entre sistemas, redes e
aplicações heterogéneas, existem três abordagens:
-
Utilização de database gateways / middleware – quando existem SGBDs
diferentes, mas baseados no mesmo modelo de dados;
-
Integração num modelo global – quando os SGBDs se baseiam em
modelos de dados diferentes;
-
Objectos distribuídos – utilizando o modelo OO (Orientado ao Objecto).
13
Bases de Dados Distribuídas
Utilização de database gateways / middleware
Os database gateways fazem traduções entre formatos de dados e comandos
das várias implementações, permitindo que cada SGBD “veja” os outros como seus
iguais. Tem como limitações a não existência de suporte para a gestão de transacções
não- locais (ou seja, permitem consultar os dados sob a gestão de outro SGBD, mas
não permitem actualizá- los) e o facto de não ter em consideração as diferenças
existentes entre os esquemas das BDs envolvidas (não havendo homogeneização ao
nível dos esquemas individuais).
A utilização de middleware esconde do nível aplicacional as especificidades
de cada SGBD, uniformizando a interface com os servidores de BDs. Alguns
exemplos de middleware são o ODBC, o IDAPI e o X Open DTP. Por fornecerem a
cada aplicação um conjunto único de funções para aceder a vários servidores de BD,
têm como grandes vantagens a portabilidade e a simplicidade, porém, raramente têm o
desempenho e a funcionalidade das APIs próprias de cada servidor de BD.
Integração num modelo global
A técnica é criar uma camada sobre os vários sistemas de BDs componentes,
dando a ilusão de um sistema homogéneo. Alguns exemplos deste método são o
esquema unificado e a multibase de dados. Na primeira abordagem, é utilizado um
modelo suficientemente rico, capaz de integrar os restantes modelos, para fazer a
integração dos esquemas de BDs participantes num único esquema unificado e global.
Já na solução multibase de dados não se procura um esquema global às BDs
participantes; pelo contrário, cada BD local opera de forma autónoma e independente,
existindo, no entanto, capacidade de cooperação entre si.
Objectos distribuídos
Os sistemas são construídos recorrendo a conjuntos de objectos previamente
desenvolvidos, que são, depois, interligados por forma a obter as funcionalidades
pretendidas.
Para
que
os
objectos
possam
trocar
mensagens
entre
si,
independentemente da linguagem de programação em que foram criados, do sistema
operativo da máquina em que residem e da sua localização na rede, é necessário
estabelecer mecanismos que proporcionem essa transparência. Existem duas
14
Bases de Dados Distribuídas
propostas: a DCOM e a CORBA. A DCOM (Distributed Component Object Model) é
uma proposta da Microsoft Corp. que fornece uma base para a partilha de objectos,
independentemente da linguagem em que estes foram desenvolvidos. A CORBA
(Common Object Request Broker Arquitecture) é da responsabilidade da OMG e
define uma interface – Object Request Broker (ORB) – cujos serviços, numa
perspectiva cliente / servidor, permitem que um objecto cliente aceda aos serviços de
um objecto servidor sem que o primeiro necessite de saber detalhes do segundo,
proporcionando, assim, um acesso transparente entre objectos distribuídos.
As BDs devem ter os seus dados protegidos, quer de acidentes naturais
(incêndios ou inundações), quer de acessos não autorizados, modifiquem eles ou não
o seu conteúdo. Nas BDDs, apesar dos dados replicados fornecerem um certo nível de
backup (melhorando o primeiro aspecto da segurança), o problema de controle de
acessos torna-se mais complexo, devido à distribuição desses mesmos dados.
Uma das primeiras questões é onde permitir o acesso aos dados: no nó de
origem do pedido ou no nó remoto? A primeira estratégia tem a seu favor a
simplicidade; porém a probabilidade de acessos não autorizados aumenta, já que o
utilizador mal- intencionado precisa unicamente de conseguir aceder a uma máquina.
A segunda estratégia é mais segura, mas também tem várias desvantagens, a começar
desde logo pelo processamento adicional que é necessário. Alé m disso, é necessário
manter tabelas de acesso, o que é computacionalmente caro, e, replicar as passwords
aumenta o risco de estas serem obtidas, apesar de encriptadas.
Uma terceira estratégia consiste em responsabilizar servidores de perfis por
permitir o acesso aos dados. Estes estão organizados em rede e quando um dos
servidores receber um pedido de acesso, todos os membros desta rede determinam se
devem autorizar ou não o acesso. Woo e Lam9 (os estudiosos que desenharam esta
solução) pensam que separar o sistema de acessos do interface da aplicação reduz as
possibilidades de ocorrerem problemas.
9
Thomas Woo e Simon Lam, Authorization in Distributed Systems: A Formal Approach, 1992 in
Steven P. Coy, Security Implications of the Choice of Distributed Database Management System
Model: Relational vs. Object-Oriented, informação disponível no site
http://csrc.nist.gov/nissc/1996/papers/NISSC96/paper072_073_074/SCO_.PDF
15
Bases de Dados Distribuídas
Para impedir que alguns utilizadores tenham acesso a certos dados, apesar de
terem acesso ao sistema, foi criado o mecanismo das vistas. Apesar de as vistas serem
eficientes em termos de impedimento do acesso a dados restritos, o seu uso pode
introduzir muito overhead, principalmente no caso das vistas globais (que necessitam
de obter dados de vários nós). Para definir que dados podem ser incluídos na vista,
todos os dados da BD devem receber uma classificação de acesso. Esta classificação
pode ser dependente de:
o Tipo: a classificação é determinada com base nos atributos associados
aos dados;
o Valor: a classificação é determinada com base no valor dos dados;
o Nível da origem: a classificação dos dados é equivalente à da sua
origem;
o Etiqueta da origem: é dada uma classificação arbitrária aos dados, ou
pela sua origem, ou pelo utilizador que os introduziu.
Uma solução apresentada por Thuraisingham e Ford 10 , que introduz pouco
overhead na verificação das permissões, utiliza dois motores de inferência, um para os
inquéritos e outro para as actualizações. Este último verifica as restrições de
segurança da BD à medida que mudam as condições de segurança nos dados. O motor
de inferência do processamento de inquéritos avalia as entidades pedidas pelo
inquérito, os dados libertos durante um determinado período que estão ao nível de
segurança dos inquéritos, e os dados relevantes disponíveis externamente que estejam
no mesmo nível de segurança. A isto chama-se a base de conhecimento. O
processador avalia as potenciais inferências que resultam da união da base de
conhecimento com as potenciais respostas ao inquérito. Se o nível de segurança do
utilizador for superior aos níveis de segurança de todas as potenciais inferências, a
resposta é permitida.
Esta técnica apenas pode ser utilizada em BDDs homogéneas. Nas BDDs
heterogéneas, seria necessário que os motores de inferência para cada tipo de SGBD
10
Bhavani Thuraisingham e William Ford, Security Constraint Processing in A Multilevel Secure
Distributed Database Management System, 1995, in Steven P. Coy, Security Implications of the Choice
of Distributed Database Management System Model: Relational vs. Object-Oriented, informação
disponível no site http://csrc.nist.gov/nissc/1996/papers/NISSC96/paper072_073_074/SCO_.PDF
16
Bases de Dados Distribuídas
verificassem as restrições de segurança de todos os dados locais, o que se tornaria
proibitivo em termos de overhead introduzido.
2.3. Regras de uma Base de Dados Distribuída
Para uma BD ser considerada verdadeiramente distribuída deve obedecer a
uma série de regras, chamadas as 12 regras de Date:
Regra 0:
Para o utilizador, um sistema distribuído não se deve distinguir de um sistema
não distribuído
1. Autonomia local
2. Inexistência de um nó central
3. Disponibilidade permanente
4. Localização transparente
5. Fragmentação transparente
6. Duplicação transparente
7. Processamento distribuído de questões
8. Gestão distribuída das transacções
9. Transparência do hardware
10. Independência do sistema operativo
11. Independência das tecnologias de rede
12. Independência do SGBD
Regra 1: Autonomia local
Os nós devem ser o máximo possível autónomos. Os dados locais são geridos
localmente, sob responsabilidade local; as operações locais devem permanecer
puramente locais. Todas as operações de um dado nó são controladas por esse nó;
nenhum nó deve depender de outro para funcionar correctamente.
Porém, existem situações em que alguma perda de autonomia é inevitável.
17
Bases de Dados Distribuídas
Regra 2: Inexistência de um nó central
Não deve existir nenhum nó “central” para nenhum serviço central, que
obrigasse a que todo o sistema estivesse dependente desse nó. As razões de ser desta
regra são simples: esse nó central poderia ser um bottleneck, e o sistema estaria
vulnerável. Sendo assim, o processamento de questões, a gestão de transacções e o
controlo de concorrência (entre outras funções) devem estar distribuídas.
Regra 3: Disponibilidade permanente
Nunca deveria existir a necessidade de fazer um shutdown planeado a todo o
sistema. Alterações na arquitectura da rede, por adição de novos nós ou remoção dos
existentes, assim como falhas em alguns nós não devem impedir os restantes de
continuarem a sua operação, se não total, pelo menos, parcialmente. Também deve ser
possível criar e destruir fragmentos e réplicas de fragmentos dinamicamente e deve
ser possível fazer um upgrade do SGBD num dos nós sem fazer parar todo o sistema.
Regra 4: Localização transparente
Os utilizadores não precisam de saber onde os dados estão guardados
fisicamente: estes devem comportar-se, pelo menos de um ponto de vista lógico,
como se os dados estivessem guardados no nó local. Esta característica vem facilitar o
desenvolvimento e manutenção de sistemas, fornecendo aos utilizadores e a todo o
nível aplicacional em geral, a facilidade de utilizar “questões genéricas”, deixando
para o SGBD a tarefa de resolver os detalhes de navegação na rede. Desta forma,
aplicações e utilizadores não são afectados por qualquer alteração na localização dos
dados.
Regra 5: Fragmentação transparente
Um sistema distribuído suporta fragmentação de dados se uma dada relação
puder ser dividida em vários “bocados” ou fragmentos para armazenamento físico.
Uma divisão bem estruturada dos dados pelas várias localizações físicas
permite uma optimização do desempenho da BDD. Os dados que são mais utilizados
numa localização física devem estar aí guardados para poupar tempo de acesso à rede.
Os utilizadores devem continuar a “ver” uma só tabela lógica.
18
Bases de Dados Distribuídas
Existem três tipos de fragmentação: horizontal, vertical e mista. A
fragmentação horizontal (SELECT) divide uma tabela separando os registos, ou seja,
cada uma das novas tabelas tem o mesmo esquema da tabela original. A fragmentação
vertical (PROJECT) divide a tabela separando as colunas, ou seja, os esquemas das
novas tabelas são subconjuntos da tabela original. A fragmentação mista utiliza uma
combinação destas duas.
Regra 6: Duplicação transparente
Este conceito é normalmente designado por replicação e também é
importantíssimo para a optimização do desempenho da BDD: dados que, por razões
de prevenção, desempenho ou disponibilidade dos dados, estão duplicados em
localizações físicas diferentes, devem ser periodicamente sincronizados. No entanto,
os utilizadores devem poder trabalhar como se os dados não estivessem replicados.
Regra 7 : Processamento distribuído de questões
Como os dados estão dispersos pelos vários nós da rede, pode ser necessário
efectuar questões de um modo distribuído, ou seja, o processamento da questão pode
necessitar da cooperação de vários nós. Todo esse processo é coordenado pelo sistema
sem intervenção dos utilizadores. Uma boa estratégia de processamento distribuído de
questões é muitíssimo importante para a BDD.
O processamento de questões num sistema distribuído envolve:
-
tempo de CPU local e actividade de I/O em vários nós diferentes;
-
algumas comunicações de dados entre estes nós.
A quantidade de comunicações é um factor que, obviamente, pesa muito no
desempenho.
Regra 8 : Gestão distribuída das transacções
Dois aspectos principais na gestão de transacções, o controlo da concorrência
e o controlo da recuperação de falhas, necessitam de mais atenção num ambiente
distribuído, isto porque uma só transacção pode envolver a execução de código em
múltiplos nós e, portanto, múltiplos updates. Assim, diz-se que cada transacção é
constituída por vários “agentes”, onde um agente é o trabalho realizado para uma
determinada transacção num determinado nó.
19
Bases de Dados Distribuídas
Mantém o lock
Nó X
do recurso RX
T1 X
T2 X
Espera que T1 X liberte RX
Espera que
Espera que
T1 Y acabe
T2 X acabe
T1 Y
T2 Y
Nó Y
Espera que T2 Y liberte RY
Mantém o lock
do recurso RY
Figura 6 – Deadlock global: nenhum nó o consegue detectar utilizando apenas
informação interna a esse nó.
Regra 9 : Transparência do hardware
Independentemente da plataforma de hardware, os utilizadores devem ver
apenas uma imagem única do sistema. É desejável que se possa correr o mesmo
SGBD em diferentes plataformas de hardware e que essas plataformas participem
como iguais (onde apropriado) num sistema distribuído.
Regra 10 : Independência do sistema operativo
É também desejável que, além de correr o mesmo SGBD em diferentes
plataformas, se possam correr diferentes sistemas operativos – até mesmo diferentes
sistemas operativos no mesmo hardware. De um ponto de vista comercial, os
ambientes de sistemas operativos mais importantes – e portanto, aqueles que o SGBD
deve suportar – são, entre outros o UNIX, o OS/2, o MS/DOS e o Windows.
Regra 11 : Independência das tecnologias de rede
É obviamente desejável que o SGBD suporte uma variedade de diferentes
redes de comunicações. Do ponto de vista do SGBD distribuído, a rede é meramente o
fornecedor de um serviço seguro de transmissão de mensagens. É considerado um
20
Bases de Dados Distribuídas
serviço seguro aquele que recebe mensagens do nó X e as entrega ao nó Y apenas
uma vez, pela mesma ordem que foram enviadas, não as misturando.
Regra 12 : Independência do SGBD
Um sistema distribuído ideal deve suportar diferentes SGBD de um modo que
seja transparente para o utilizador.
2.4. Replicação e Fragmentação de Dados
Estes dois conceitos, apesar de diferentes, estão intimamente ligados quando
se trata do desenho de uma BDD. Depois de obtido o design da fragmentação, é
necessário estudar a melhor localização para cada fragmento (alocação) e se será ou
não necessário replicar cada um deles. Estas decisões devem ser tomadas tendo em
vista a melhor performance global possível para todas as aplicações, pesando factores
tais como a performance do sistema, os custos, a tolerância a falhas de nós individuais
e da rede.
Para melhor exemplificar estes dois conceitos, será apresentado um pequeno
exemplo: uma empresa de construção civil que resolveu modernizar-se e pretende
distribuir a sua BD. Nesta existem, entre outras, uma tabela EMPREG com o código,
nome, código do cargo, código da localização da área de residência e código da obra
(onde se encontra a trabalhar no momento) dos empregados; uma tabela CARGO com
o código, nome e salário correspondente a cada cargo; uma tabela LOCALIZACAO
com o código e nome de localizações e, finalmente, uma tabela OBRA com o código,
nome e código de localização de cada obra.
CODIGO
NOME
LOCALIZACAO
CARGO
OBRA
1
F. Rodrigues
1
4
1
2
J. Barros
2
4
2
3
A. Silva
3
3
1
4
J. Sousa
1
2
3
5
M. Pereira
2
1
1
Tabela 1 : Tabela EMPREG da firma de Construção Civil
21
Bases de Dados Distribuídas
CODIGO
NOME
SALARIO
1
mestre-obras
€ 1500
2
carpinteiro
€ 1200
3
electricista
€ 1300
4
servente
€ 800
Tabela 2 : Tabela CARGO
CODIGO
LOCALIZACAO
1
Porto
2
Lisboa
3
Coimbra
Tabela 3 : Tabela LOCALIZACAO
CODIGO
NOME
LOCALIZACAO
ORCAMENTO
1
Lote 2
1
€300.000.00
2
Loja 34
3
€500.00.00
3
Moradia 76
2
€100.000.00
Tabela 4 : Tabela OBRA
2.4.1. Replicação de Dados
A replicação é a técnica de duplicar dados em vários nós diferentes. As razões
que podem tornar desejável esta duplicação são, basicamente, as seguintes:
-
Prevenção contra falhas: a falha de um nó que contenha dados vitais ao
sistema não compromete, necessariamente, o seu funcionamento;
22
Bases de Dados Distribuídas
-
Redução da transferência de dados: há uma maior probabilidade de os
dados estarem disponíveis localmente ou mais perto do nó que os requisita.
Desta maneira, são reduzidos os custos da sua transferência, quer em
termos de exploração dos meios de comunicação, quer em termos de
tempo consumido;
-
Paralelismo : os inquéritos à base de dados podem ser processados por
vários nós em paralelo (maior desempenho).
Porém, também existem desvantagens que se prendem com o facto de ser
necessário manter a coerência global do sistema. De facto, quando a informação num
nó é actualizada, as suas réplicas também o devem ser, o que aumenta o overhead do
sistema (custos de actualização e necessidade de algoritmos complexos para a
execução de transacções). A replicação é mais vantajosa em sistemas onde haja
muitas leituras a dados, mas poucas actualizações.
Um pormenor de implementação importante tem a ver com a localização física
das réplicas. Um conjunto de réplicas é identificado por um nome lógico e cada
réplica individual por um nome físico. Por exemplo: o ficheiro fich1.DB existe na
BD, no nó X. Quando esse ficheiro é replicado no nó Y, passam a existir dois
ficheiros com os seguintes caminhos físicos: X/fich1.DB e Y/fich1.DB. A aplicação
cliente apenas tem de saber o nome lógico para aceder ao ficheiro, sendo da
responsabilidade do SGBD manter um catálogo de réplicas que forneça o
mapeamento dos nomes físicos e respectivas localizações.
Dependendo de quando as actualizações são propagadas, a replicação pode ser
síncrona ou assíncrona. A replicação síncrona faz as actualizações às réplicas do
item de dados dentro de uma única transacção. Este tipo de replicação também é
chamado de eager replication (replicação esfomeada, numa tradução literal). Quando
é feito o COMMIT à transacção, todas as réplicas estão no mesmo estado e têm os
mesmos valores. Assim, a transacção apenas pode ser finalizada com sucesso se as
réplicas forem alteradas com sucesso. O modelo assíncrono actualiza apenas uma das
réplicas numa transacção e propaga as alterações para as outras réplicas mais tarde,
23
Bases de Dados Distribuídas
em outra transacção. Este tipo de replicação também é chamado lazy replication
(replicação preguiçosa).
Quando é indispensável que exista consistência estrita (os dados têm de estar
permanentemente actualizados), é necessário usar a replicação síncrona. Se não for
esse o caso, deve utilizar-se a replicação assíncrona por ter melhores tempos de
resposta. É possível até indicar intervalos de tempo para que as actualizações tenham
lugar, de hora em hora, por exemplo.
2.4.1.1 Me c anis mos de ac tualizaç ão
Existem vários tipos de mecanismos de actualização, diferindo nos
pormenores de onde as actualizações são feitas, das permissões dos clientes e do
timing das actualizações.
?
primary copy (também chamada primary site replication);
?
update everywhere (também chamada shared ownership ou, em
português, replicação simétrica);
?
Epidémica – as operações são feitas numa única réplica (uma qualquer)
e uma transacção diferente compara os dados das outras réplicas,
actualizando-as;
?
Subscrição – semelhante à anterior, mas considera-se que os nós
apenas querem ter os dados, não se importando com a sua consistência.
Os nós que desejem manter a sua réplica actualizada devem
subscrever-se perante o nó responsável pelos dados. Um nó que não se
tenha subscrevido, é responsável por tentar obter os dados a partir de
qualquer um dos outros nós, mas é possível que esses dados não sejam
os mais recentes.
?
ROWA (read one, write all) – como o nome indica, nas operações de
escrita, as réplicas são sincronizadas e actualizadas ao mesmo tempo.
Como todas as réplicas estão sincronizadas, é possível ler apenas uma
delas, obtendo uma leitura consistente.
24
Bases de Dados Distribuídas
As duas primeiras técnicas são as mais difundidas, apresentando-se em maior
pormenor de seguida. A técnica da subscrição é a adoptada pelo SQL Server e será
mais aprofundada no terceiro capítulo.
Na replicação por primary copy um dos nodos detém a posse dos dados,
sendo o único que os pode actualizar e propagar essas actualizações para os nodos
onde estão as suas réplicas – denominadas snapshots). Este método funciona da
seguinte maneira:
-
Primeiro, é necessário escolher a réplica do item de dados que irá ser a
primary copy. O nó que contém a réplica é chamado primary site.
Diferentes items de dados podem ter diferentes primary sites. O primary
site deve ser escolhido de modo a que seja o que acede mais vezes a estes
dados, ou o que lhes aceda mais dificilmente (devido, por exemplo, a uma
ligação de rede com uma baixa taxa de transferência de dados).
-
Quando uma transacção necessita de fazer um lock ao item de dados Q,
pede o lock do primary site de Q. Implicitamente, é obtido o lock de todas
as réplicas do item de dados.
A vantagem deste método é a sua simplicidade, já que dados replicados são
tratados de um modo semelhante aos dados não replicados. Por outro lado, o primary
site pode tornar-se um gargalo para o desempenho de um grande sistema: são
enviados para este nó os pedidos de leitura provenientes de nós que não tenham
réplicas destes dados, e todos os pedidos de escrita. Apesar de os pedidos de leitura
poderem ser realizados em paralelo por nós com réplicas, o processamento dos
pedidos de escrita são todos feitos por este nó.
Existe uma variante deste tipo de replicação, a dynamic ownership. A
autorização para actualizar dados replicados vai-se movimentando entre os nós, mas
apenas um dos nós possui a autorização em cada momento.
Na replicação simétrica, qualquer réplica pode ser actualizada a qualquer
momento, até mesmo em simultâneo, propagando-se o efeito dessas actualizações, de
forma sincronizada ou não, para as restantes réplicas. Este método pode dar origem a
conflitos entre actualizações, o que acontece quando duas ou mais transacções tentam
25
Bases de Dados Distribuídas
actualizar os mesmos dados em duas ou mais réplicas distintas simultaneamente.
Formas de resolução destes conflitos incluem, por exemplo, o recurso ao factor
tempo, em que prevalece a actualização mais recente.
Para além de mecanismos de actualização incluídos na kernel da BD, existem
mecanismos que podem ser utilizados em BDs já existentes, como é o caso do Bengal.
Este sistema foi construído recorrendo à tecnologia COM da Microsoft (garantindo,
assim, a sua portabilidade) e pode ser utilizado em BDs relacionais tais como a
Sybase SQL Anywhere, Oracle e Microsoft SQL Server. Aqui, o ênfase é colocado
nos utilizadores móveis remotos e é utilizada replicação assíncrona, optimista, com
ajuda de servidores de reconciliação especiais.
Reconciliação é uma técnica para resolver o problema de a mesma réplica ser
actualizada por dois nós diferentes, com dados contraditórios. O item de dados tem o
timestamp da última actualização; a réplica que pretende actualizar este item de dados
tem dois timestamps, um novo e um mais antigo (correspondente à anterior
actualização dos dados). Se este último valor e o timestamp do item de dados forem
iguais, então a actualização é segura: os dados são alterados e é colocado no item de
dados o timestamp que a réplica contém, senão, a réplica tem de ser reconciliada.
2.4.1.2 Re plic aç ão e To le rânc ia a F alhas
Existem duas estratégias de replicação:
Gossip (“Boato”) – as actualizações são propagadas assincronamente a todas
as réplicas, uma a uma. Ou seja, são enviadas simples mensagens a todos os nós onde
existam réplicas;
Comunicação de Grupo – é feito um multicast/broadcast das actualizações a
todas as réplicas ao mesmo tempo. É necessário ter em atenção que o broadcast não é
possível nas WANs.
Por vezes, não é possível actualizar todas as réplicas. Em ambientes realistas,
temos também de contar com a possibilidade de existirem falhas, quer dos nós, quer
da rede de comunicações. A melhor maneira de lidar com falhas nos nós é ignorá- las.
26
Bases de Dados Distribuídas
Existem, no entanto, métodos para corrigir a falta de actualizações de réplicas em nós
que falharam ou que deixaram de estar disponíveis devido a uma falha na rede.
Um deles é o protocolo de quorum, mais propriamente, o protocolo consensual
de quorum. Neste método, cada cópia tem um peso associado e um número de versão.
Que o peso total de todas as cópias seja N, que o quorum de leitura seja Qr e o de
escrita Qw. Estes dois últimos valores devem respeitar as seguintes restrições:
2*Qw > N
e
Qr + Qw > N
Cada leitura deve fazer lock a um número de réplicas cuja soma dos pesos seja
maior ou igual a Qr, e será lida a réplica com o maior número de versão. Cada escrita
deve fazer lock a um número de réplicas cuja soma dos pesos seja maior ou igual a
Qw. Será obtida a réplica com o maior número de versão e todos os nós escolhidos
terão a sua réplica actualizada e um novo número de versão.
Os quorums que permitem operações de leitura e escrita devem ter pelo menos
um nó em comum (que contenha a réplica) e esse nó não deve deixar que sejam feitos
acessos concorrentes conflituosos. Isto assegura que as operações de leitura retornam
o valor atribuído pela última operação de escrita, e que qualquer operação de escrita
concorrente com as operações de leitura estão bem sincronizadas. Os quorums que
permitem operações de escrita devem ter um membro comum, para assegurar que as
operações de escrita não são executadas concorrentemente.
Figura 7 : Método consensual de quorum
27
Bases de Dados Distribuídas
2.4.2 Fragmentação de Dados
A fragmentação é a técnica de dividir logicamente as relações. As tabelas não
são uma unidade lógica apropriada para estruturar uma BDD, já que, normalmente, as
aplicações e seus utilizadores não estão interessados em todos os dados que estas
contêm.
Existem dois tipos de fragmentação:
?
Horizontal – é feita uma selecção à tabela, de acordo com alguma condição
específica;
?
Vertical – é feita uma projecção da tabela.
Também é possível combinar estes dois tipos, originando uma fragmentação
mista.
Tomando o exemplo anteriormente referido da empresa de construção civil, a
fragmentação mais útil para o mestre de obras de Lisboa teria como base,
provavelmente, uma fragmentação baseada na localização do empregado:
CODIGO
NOME
LOCALIZACAO
CARGO
OBRA
2
J. Barros
2
4
2
5
M. Pereira
2
1
1
Tabela 5 : Fraccionamento Horizontal da Tabela de Empregados
Já para o funcionário administrativo que tem a seu cargo o processamento dos
salários, apesar de fisicamente estar no Porto, apenas quer ver esta informação:
CODIGO
NOME
CARGO
1
F. Rodrigues
4
2
J. Barros
4
3
A. Silva
3
4
J. Sousa
2
5
M. Pereira
1
Tabela 6 : Fraccionamento Vertical da Tabela de Empregados
28
Bases de Dados Distribuídas
Para o gestor de projecto que se encontra em Coimbra saber quem são os
empregados da sua área, independentemente do seu cargo e do seu salário:
CODIGO
3
NOME
LOCALIZACAO
A. Silva
3
Tabela 7 : Fraccionamento Misto da Tabela de Empregados
A fragmentação horizontal, por sua vez, divide-se em duas:
? Fragmentação Horizontal Primária;
? Fragmentação Horizontal Derivada.
A fragmentação horizontal diz-se primária quando é definida por uma
condição aplicada directamente à relação, como se pode ver no primeiro exemplo de
fragmentação apresentado.
A fragmentação horizontal é derivada quando é definida por uma condição
que é aplicada aos tuplos de relação diferente. Para exemplificar este caso, pode
apresentar-se a selecção dos códigos e nomes das obras onde trabalham os
empregados com código entre 1 e 3.
CODIGO
NOME
1
Lote 2
2
Loja 34
Tabela 8 : Fragmentação derivada da tabela OBRA
Para que a fragmentação seja correcta, deve ser:
-
Completa – se existe um determinado dado na relação original, existe um
mapeamento que indica onde esse fragmento se encontra, e esse fragmento
existe garantidamente;
-
Reconstruível – a relação original pode ser correctamente reconstruída a
partir dos seus fragmentos;
-
Única – os dados de um fragmento não devem aparecer em mais nenhum,
excepto a chave primária na fragmentação vertical.
29
Bases de Dados Distribuídas
Esta técnica permite o processamento paralelo de uma relação (maior
desempenho) e permite colocar os dados onde são acedidos mais insistentemente
(diminuindo o peso das comunicações).
Os factores que a afectam dividem-se em:
? Estrutura da BD (esquema conceptual global) – temos de saber as ligações
entre os tuplos (chaves estrangeiras / integridade referencial) usadas para
definir fragmentos horizontais derivados;
? Características das aplicações – condições usadas, localização e
frequências de acessos;
? Características da rede – número e localização dos nós, tipo e largura de
banda da rede;
? Capacidade de processamento dos nós.
2.4.2.1 F ragme ntaç ão ho rizo nta l
A primeira coisa a fazer é seleccionar os mintermos e determinar as
frequências de acesso. Mintermos são condições (ou predicados) compostas por
condições simples, que definem conjuntos de dados acedidos como uma unidade por
aplicações / inquéritos, ou seja, candidatos a serem fragmentos horizontais.
Depois de obtidos os mintermos, é importante saber, em média, quantos tuplos
seriam seleccionados por cada e qual a frequência com que esses tuplos seriam
acedidos. Os que seleccionam mais tuplos ou tuplos com maiores frequências de
acesso, seriam preferencialmente escolhidos para base da fragmentação.
Quando nos deparamos com fragmentação horizontal derivada (FHD), o
problema torna-se mais complexo. Quando temos duas ou mais hipóteses de FHD,
devemos escolher aquela que :
-
é acedida mais frequentemente (a não ser nos casos em que os custos de
utilização das aplicações menos acedidas são tão que anulam a diferença
do uso);
-
oferece melhor performance nas operações de join, porque o join é a mais
“cara” das operações algébricas, compensando o esforço de a melhorar.
30
Bases de Dados Distribuídas
Os joins menos pesados computacionalmente são aqueles cujas relações ou
fragmentos a juntar são pequenos, ou aqueles que podem ser processados de um modo
distribuído. Por exemplo, processar o join do fragmento A1 com B1, enquanto o join
do fragmento A2 com B2 é feito separadamente e em paralelo sem ser preciso fazer o
join de A1 com B2 nem o de A2 com B1, porque se sabe que estes nunca produziriam
tuplos.
Para verificar se o join de dois fragmentos poderá (possivelmente) produzir
tuplos, foram criados os Gráficos de Join (Join Graphs).
Figura 8 : Gráfico de Join particionado
De realçar que estes gráficos não indicam se irão existir tuplos tendo em conta
o conteúdo da BD num determinado momento, mas se as definições dos fragmentos
permitem a existência de tuplos ao ser feito o join.
O Phorizontal é um algoritmo que ajuda à tarefa da fragmentação. Tem como
input uma relação R e um conjunto de predicados simples Pr e devolve um conjunto
de predicados mintermos M, de acordo com os quais a relação deve ser fragmentada.
Os seus passos são os seguintes:
1. Pr’ <- COM_MIN(R, Pr);
2. Determinar o conjunto de predicados mintermos;
3. Determinar as implicações entre cada Pi e Pr;
4. Eliminar os mintermos contraditórios de M.
31
Bases de Dados Distribuídas
O COM_MIN é um algoritmo baseado no conceito do minimalismo
(minimality) dos predicados. Um conjunto de predicados diz-se mínimo se todos os
predicados que o compõem são relevantes para a fragmentação (relevantes no sentido
em que fazem com que o fragmento seja ainda mais dividido). Tem como input uma
relação R e um conjunto de predicados simples Pr e retorna um conjunto de
predicados simples, completos e mínimos Pr’ baseado em Pr.
2.4.2.2 F ragme ntaç ão ve rt ic al
Para este tipo de fragmentação também se devem tentar encontrar os
conjuntos de dados que são acedidos como uma unidade. Existem duas técnicas para a
realizar:
? separar as relações originais;
? agrupar os atributos individuais desde o início.
A primeira técnica é mais utilizada, porque facilita a garantia de integridade.
A informação necessária para a fragmentação vertical é:
? As aplicações / inquéritos usam que atributos?
? A frequência com que cada aplicação / inquérito é executada.
A primeira pode ser obtida através da matriz de utilização dos atributos e a
segunda, através da matriz de afinidades entre atributos. Basicamente, o que se quer
fazer é identificar que atributos são acedidos conjuntamente e com que frequência,
para depois fazer o design da fragmentação vertical (de modo a suportar as
combinações mais comuns de atributos, que são usados mais frequentemente).
Claro que, no final, nem todas as aplicações irão ser idealmente suportadas: o
resultado será uma solução de compromisso entre necessidades conflituosas.
A matriz de utilização de atributos tem os atributos num dos eixos e os
inquéritos no outro. Quando um inquérito acede a um determinado atributo, coloca-se
1 na posição correspondente e 0, caso contrário.
32
Bases de Dados Distribuídas
Ex:
Q1 : SELECT nome, cargo FROM EMPREG
Q2 : SELECT nome, proj FROM EMPREG
Q1
Q2
Lisboa
1
5
Porto
10
17
Coimbra
3
0
Tabela 9: Nº de inquéritos efectuados por nó
Inquéritos
Q1
Q2
nome
1
1
Cargo
1
0
Proj
0
1
Atributos
Tabela 10: Matriz de utilização de atributos
A matriz de afinidades entre atributos (MAA) tem os atributos das relações
nos dois eixos. Para a construir determina-se a frequência de acessos (em todos os
nós) para cada inquérito. Depois calcula-se o número de vezes que cada par de
atributos é acedido. De seguida, encontram-se os atributos com valores semelhantes,
de modo a agrupá- los no mesmo fragmento vertical: cria-se uma MAA clustered. Já
existem algoritmos para a realização desta tarefa. Um deles é o Algoritmo de União
de Energias (Bond Energy Algorithm), cujo objectivo é agrupar os valores das
colunas. Segundo este algoritmo, a inicialização é feita fixando uma das colunas. Em
cada iteração serão colocadas as restantes colunas. Para cada uma das colunas, será
escolhida a localização que maximiza a medida de afinidade global (valores elevados
junto com valores elevados, valores inferiores junto com valores inferiores). O passo
final será decidir que atributos são mantidos juntos. Isto poderá ser visto através da
MAA clustered, mas se esta for demasiado complicada, utilizam-se algoritmos de
particionamento.
Atributos
Nome
cargo
Projecto
nome
36
14
22
cargo
14
14
0
projecto
22
0
22
Tabela 11: Inicialização da matriz de afinidades entre atributos
33
Bases de Dados Distribuídas
2.4.2.3 F ragme ntaç ão híbrida
A natureza das aplicações pode exigir uma fragmentação mais complexa. As
técnicas são basicamente as mesmas já apresentadas.
2.4.3. Alocação
Depois de fragmentar as relações, deve estudar-se a sua alocação (colocar o
fragmento num único nó) e/ou replicação (colocar o fragmento em dois ou mais nós).
O objectivo fundamental da alocação é minimizar os custos, ou então optimizar
medidas de performance (tais como tempos de resposta e capacidade de
processamento). Os custos podem incluir:
? custos da comunicação entre nós;
? custos de processamento;
? custos de obtenção e actualização dos dados;
? custos de armazenamento dos dados.
A introdução da primeira cópia é altamente vantajosa porque aumenta a
confiabilidade e disponibilidade do sistema. Mas, a partir daí, o benefício de criar
mais cópias diminui de um modo não linear. Também se devem ter em conta
restrições tais como a capacidade de armazenamento e de processamento dos nós.
A alocação, por envolver um elevado número de variáveis, pode tornar-se um
problema extremamente complexo, e a sua complexidade é directamente proporcional
ao número de nós e de aplicações existentes no sistema. Pode acontecer até que não
seja possível encontrar a solução óptima em tempo útil e, se for esse o caso, ter-se-á
de recorrer a:
? Heurísticas – quando se deseja optimizar o desempenho;
? Programação de fórmulas lineares / inteiras – quando o objectivo é
minimizar os custos;
? Método “melhor medida” (best-fit), para determinar uma alocação sem
replicação. É associada uma medida a cada alocação possível e o nó com a
melhor medida é seleccionado. Para alocar réplicas utiliza-se a variante
“todos os nós beneficiários” (replicar em todos os nós onde o benefício de
34
Bases de Dados Distribuídas
alocar uma cópia é maior que o custo) ou a variante “replicação adicional”
(começar com a solução não replicada e ir progressivamente introduzindo
cópias até que deixe de ser vantajoso).
2.5 Gestão distribuída de transacções
Segundo M.Tamer Özsu e Patrick Valduriez, uma transacção é uma colecção
de acções que faze m transformações consistentes aos estados do sistema, ao mesmo
tempo que preservam a sua consistência.
Nas BDD, as transacções viram a sua complexidade aumentada, já que uma
transacção pode envolver a cooperação de vários nós. Quando isso acontece, a
transacção é chamada “global”, e é dividida em sub-transacções, tantas quantas os nós
envolvidos.
Figura 9 : Execução de uma transacção distribuída 11
11
M. Tamer Özsu e Patrick Valduriez in Distributed Database Management Systems -
www.csse.monash.edu.au/courseware/cse5200
35
Bases de Dados Distribuídas
Apesar destas contingências, as transacções devem manter as suas
propriedades fundamentais:
? Atomicidade – todas as sub-transacções são realizadas (COMMIT) e logo,
também é feito o COMMIT da transacção global, ou todas são abortadas
(ABORT);
? Consistência – cada transacção a executar sozinha numa BD consistente
mantém- na consistente. Ou seja, não devem ser violadas as restrições de
integridade da BD;
? Isolamento – para que esta característica seja uma realidade, é necessário :
o Seriazibilidade;
o Uma transacção incompleta não deve mostrar os seus
resultados às outras transacções antes de ser feito o seu
COMMIT (evitando aborts em cascata).
Ao existir isolamento evitam-se vários problemas :
o Leitura suja (dirty read) – a transacção T1 modifica o item de
dados X, que é, de seguida, lido por T2 antes de T1 terminar;
T1 aborta; T2 leu um valor que nunca existiu na BD;
o Leitura não repetível ou confusa (fuzzy read) – T1 lê X; t2
modifica ou apaga X e faz COMMIT; T1 tenta ler X outra vez,
mas lê um valor diferente ou não o consegue encontrar;
o Fantasmas (phantom) – T1 procura na BD tuplos de acordo
com um predicado enquanto T2 insere novos tuplos que
satisfazem esse predicado.
? Persistência – a partir do momento em que é feito o COMMIT, o sistema
deve garantir que os resultados não desaparecem, mesmo que existam
falhas subsequentes.
36
Bases de Dados Distribuídas
2.5.1 Protocolos de segurança
Para que as características fundamentais das transacções (mais conhecidas por
ACID: Atomicity, Consistency, Isolation, Durability) pudessem ser uma realidade nas
BDD, foi necessário criar protocolos de segurança:
? protocolos de COMMIT;
? protocolos de ABORT ou terminação;
? protocolos de recuperação.
Cada nó tem um gestor de transacções local, responsável por manter o log
(para recuperação caso seja necessário) e por participar na coordenação da execução
concorrente de transacções a executar no próprio nó. Também tem um coordenador de
transacções, responsável por iniciar a execução de transacções que começam nesse
nó, por distribuir as sub-transacções pelos nós apropriados, e por coordenar a
terminação de todas as transacções que começam no próprio nó (fazer o COMMIT ou
o ABORT em todos os nós).
2.5.1.1 P rotoc olos de C O MMIT
Asseguram que a propriedade da atomicidade da transacção é respeitada. O
protocolo mais conhecido e mais simples é o Two-Phase Commit (COMMIT em duas
fases) ou 2PC.
Figura 10 : Protocolo 2PC12
12
M. Tamer Özsu e Patrick Valduriez in Distributed Database Management Systems -
www.csse.monash.edu.au/courseware/cse5200
37
Bases de Dados Distribuídas
O nó coordenador (controla o protocolo) envia uma mensagem “Pronto para
COMMIT?” (1) a cada um dos nós participantes envolvidos na transacção em causa.
Estes respondem com uma mensagem de “Pronto”, indicando que está preparado para
fazer o COMMIT da sua parte da transacção, ou então com uma mensagem de
“Abort ”, indicando que não é possível fazer o COMMIT (2). Todos os participantes
têm de responder com “Pronto” para que o COMMIT da transacção possa ocorrer.
Senão, é enviado um “Global Abort ” a todos os participantes para que abortem as
suas sub-transacções. Ou seja, basta um “Abort ” de um dos nós para que toda a
transacção falhe.
Existem três implementações do 2PC:
? centralizada – todas as comunicações envolvem o nó coordenador;
? linear – os nós comunicam numa sequência ordenada, a partir do
coordenador;
? distribuída – todos os nós comunicam uns com os outros directamente.
O 2PC pode bloquear devido à falha de um dos nós durante o processo. Uma
transacção bloqueada não é desejável porque continua a manter os locks dos recursos
de que necessita para a sua transacção – impedindo que outras transacções que
precisem desses mesmos recursos os possam obter.
Para ultrapassar esta limitação do 2PC, foi criado o Three-Phase Commit (3PC).
Este é semelhante ao 2PC, mas com um passo adicional intermédio (Pre-Commit),
que confirma que todos os nós estão em condições de finalizar. Na prática, porém,
como este protocolo aumenta ainda mais o tráfego de mensagens, não teve aceitação
comercial.
2.5.1.2 P rotoc olos de AB O R T o u Te rminaç ão
Se uma falha ocorrer, estes protocolos indicam aos restantes nós como lidar com
o facto. Tipicamente, os outros nós não devem ter de esperar até que a falha seja
reparada para terminar a transacção.
No caso do 2PC, se um nó participante falha, por exemplo:
-
se o coordenador se encontra no estado WAIT, é necessário abortar a
transacção;
38
Bases de Dados Distribuídas
-
se o coordenador se encontra no estado COMMIT ou ABORT, deve
reenviar a mensagem de COMMIT / ABORT global ao nó em falha.
2.5.1.3 P rotoc olos de Re c upe raç ão
Depois de os nós que falharam voltarem a ficar operacionais, estes protocolos
indicam- lhes as medidas que devem tomar para se sincronizarem com os restantes
nós. Voltando ao caso do 2PC:
-
se o coordenador falha no estado WAIT, quando em recuperação, pode
simplesmente recomeçar o processo de COMMIT;
-
se o participante falha no estado READY, quando em recuperação, pode
perguntar ao coordenador o que fazer quanto à sub-transacção
interrompida.
2.5.2 Controlo de Concorrência
Existem várias técnicas para sincronizar transacções concorrentes de modo a
manter a consistência da BD, enquanto ao mesmo tempo é atingido o máximo grau de
concorrência.
O escalonamento (ou história) de execução é a ordem por que as operações de
um conjunto de transacções é executada. Um escalonamento serial é aquele onde as
transacções ocorrem consecutivamente. Se cada transacção for consistente (obedecer
às regras de integridade), é garantida a consistência da BD no fim da execução de
todas as transacções. Num escalonamento serializável, as transacções executam
concorrentemente, mas o efeito prático sobre a BD é equivalente ao de um
escalonamento serial. Equivalente em que aspectos?
-
equivalência de conflitos : a ordem relativa de execução de operações
conflituosas pertencentes a transacções que não foram abortadas em dois
escalonamentos é a mesma;
-
operações conflituosas: duas operações (por exemplo, Read e Write)
entram em conflito se acedem ao mesmo item. Na prática, não se pode
39
Bases de Dados Distribuídas
mudar a sua ordem relativa de execução. Se duas operações de duas
transacções diferentes entrarem em conflito, as transacções dizem-se
conflituosas.
Os algoritmos de controlo de concorrência dividem-se em pessimistas (dos
quais se pode dar como exemplo o Two-Phase Locking ou 2PL, algoritmos de
timestamp e híbridos) e optimistas.
O algoritmo Two-Phase Locking tem duas fases: a de obtenção de locks e a de
libertação de locks. Cada transacção deve obter os locks de todos os objectos de que
vai necessitar antes de os usar. Se um objecto já estiver locked por uma outra
transacção, todas as outras têm de esperar. Quando a transacção liberta um dos locks,
não pode pedir outros.
No 2PL distribuído, dois escalonamentos 2PL são colocados em cada nó para
gerir os locks dos objectos desse nó. Uma transacção pode ler qualquer uma das
réplicas de um objecto: basta- lhe para isso pedir o lock a qualquer um dos nós do
sistema onde exista essa réplica. Escrever num objecto já implica obter os locks de
escrita de todos os objectos.
Figura 11 : Fases do Two-Phase Locking 13
13
M. Tamer Özsu e Patrick Valduriez in Distributed Database Management Systems -
www.csse.monash.edu.au/courseware/cse5200
40
Bases de Dados Distribuídas
No algoritmo de timestamp, a abordagem é diferente: a cada transacção é
atribuído um timestamp único em todo o sistema. A cada item de dados é atribuído
um read timestamp e um write timestamp. Operações conflituosas são resolvidas
usando o ordenamento timestamp.
O modo como são gerados os timestamps deve ser objecto de algum cuidado
para que estes sejam, de facto, únicos. Segundo o método de Lamport, o timestamp é
um número caracterizado por dois grupos de dígitos: os menos significativos
identificam o nó onde ocorreu o evento, enquanto os mais significativos indicam os
eventos que ocorreram nesse nó. Estes últimos podem ser obtidos quer através de um
contador lógico quer através de um relógio local. De cada vez que dois nós trocam
uma mensagem, os timestamps são sincronizados. O receptor deve ter um timestamp
maior do que o do emissor, e se isso não for verdade, a transacção é abortada. O
contador local do receptor é avançado, e é feita uma nova tentativa.
Nos algoritmos de locking e nos de timestamp que implicam espera podem
ocorrer deadlocks. Existem várias estratégias alternativas para lidar com este
problema:
-
Ignorar: deixar o programador lidar com o problema ou fazer restart do
sistema;
-
Prevenir: garantir que os deadlocks não chegam sequer a ocorrer.
Verificar a transacção quando esta inicia e pré-declarar todos os recursos
de que vai necessitar. Este método tem a desvantagem de reduzir a
concorrência (devido à pré-alocação) e aumentar o overhead (por ter de
determinar se a alocação é segura). Por outro lado, temos a garantia de
não existirem rollbacks ou restarts;
-
Evitar: detectar potenciais deadlocks antes de estes ocorrerem e tomar
medidas para que isso não aconteça. As transacções podem avançar, a não
ser que algum recurso esteja indisponível; neste caso podem esperar por
um determinado período de tempo. É mais vantajoso que o método
anterior;
-
Detectar e recuperar: se os deadlocks ocorrerem, detectá- los e obrigá- los
a terminar.
41
Bases de Dados Distribuídas
Para a detecção pode recorrer-se a Gráficos de Espera (Wait-For Graphs WFG). Estes podem ser transmitidos a um único nó responsável pela tarefa de
detecção (detecção centralizada), a um nó pai (detecção hierárquica) ou a outros nós
(detecção distribuída). Nesta última estratégia, todos os nós cooperam para a detecção
de deadlocks. Cada nó cria um WFG e resolve os deadlocks locais, caso existam. Se
existirem potenciais deadlocks globais, o nó envia o WFG para o nó seguinte ou para
o nó anterior.
A frequência de transmissões deve ser adequada às capacidades da rede de
comunicações e às implicações da ocorrência de um deadlock sobre as aplicações e
dados envolvidos. Demasiadas transmissões implicam um maior custo das
comunicações, mas têm como vantagem menores atrasos devido a deadlocks não
detectados. Poucas transmissões, por outro lado, provocam maiores atrasos caso
ocorra um deadlock, mas os custos de comunicação são menores.
2.6 Processamento distribuído de questões
O processamento distribuído de questões é o processo de obter dados de
diferentes nós. Várias estratégias podem, então, ser congeminadas. Nos sistemas
centralizados, o primeiro critério para medir o custo de uma determinada estratégia
era o número de acessos a disco. Num sistema distribuído, outros critérios devem ser
levados em conta, incluindo o custo da transmissão de dados sobre a rede e a
possibilidade de paralelismo.
A função de obtenção de dados tem três componentes:
Custo de I/O + custo de CPU + custo de comunicações
Dependendo do ambiente distribuído (LAN ou WAN), deve prestar-se mais
atenção a um ou outro custo. Nas WANs, os custos de transmissão são dominantes (é
possível, mesmo, ignorar os outros factores), enquanto nas LANs deve-se ter em
conta a função global. Nas LANs já é possível recorrer aos broadcasts.
42
Bases de Dados Distribuídas
A optimização de questões começa, inclusive, na fragmentação e alocação
desses mesmos fragmentos. De facto, se a alocação for bem estruturada, os custos
podem ser minimizados e o desempenho do sistema optimizado.
O processamento distribuído de questões enfrenta várias questões complexas,
a começar logo no cálculo do custo do modelo. Devem, aliás, utilizar-se heurísticas
para reduzir o número de alternativas de optimização dos inquéritos. É necessário
encontrar uma solução de compromisso entre a necessidade de optimização e a
necessidade de reduzir os custos de execução. Por vezes, a optimização tem um tempo
de vida limitado devido a mudanças no sistema, o que implica reoptimizações dos
inquéritos (que reflictam a nova realidade). Num sistema em constante mutação, é
contraproducente consumir muitos recursos e tempo de execução para encontrar o
melhor escalonamento: eventualmente será necessário reflectir essas mudanças, e
encontrar um novo escalonamento.
Depois de encontrado o melhor escalonamento global, é necessário proceder a
optimizações locais, seleccionando o melhor caminho de acesso e utilizando técnicas
de optimização centralizadas.
A necessidade de manter a integridade dos dados do sistema não é
problemática nos sistemas homogéneos. Mas, nos heterogéneos, onde as restrições de
integridade são, muitas das vezes, diferentes, obrigam a que seja necessário resolver
conflitos de resolução antes de se poder avançar para o inquérito global. Estes
conflitos existem a três níveis:
? inconsistências em restrições de integridade locais;
? dificuldades em especificar restrições de integridade globais;
? inconsistências entre restrições de integridade locais e globais.
As restrições de integridade globais, apesar de difíceis de implementar, podem
eliminar as inconsistências locais em cada BD individual. As restrições de integridade
globais, por outro lado, não estão ligadas às BDs individuais e pode não ser prático
mudar a organização da estrutura para tornar a BD consistente. Nestes casos, as
inconsistências entre restrições de integridade locais e globais são inevitáveis. A
43
Bases de Dados Distribuídas
resolução dos conflitos depende do nível de controlo centralizado. Se este controlo for
forte, as restrições de integridade globais terão precedência. Caso contrário, serão as
locais.
2.6.1 Passos do processa mento distribuído de questões
Os passos no processamento distribuído de questões são explicitados de
seguida:
? Decomposição;
? Localização;
? Optimização do inquérito global.
A utilização de árvores de análise algébrica facilita o trabalho da verificação
do processamento distribuído de questões ao apresentar de um modo gráfico os passos
da questão. Os inquéritos remotos são imediatamente localizados, permitindo mais
rapidamente remeter para o servidor adequado a execução do sub- inquérito.
2.6.1.1 De c ompos iç ão
Compõe-se de três fases:
1. Normalização
Transformação de SQL em álgebra relacional e verificação léxica e
sintáctica (validade, atributos e relações, tipos).
Ex:
SELECT OBRA.nome
FROM OBRA O, LOCALIZACAO L
WHERE O.orcamento > 30.000.00
AND O.localizacao = L.codigo
AND L.localizacao = “Porto”
44
Bases de Dados Distribuídas
? nome
? O.orcamento > 30.000.00
? O.localizacao = L.codigo
OBRA
? localizacao = “Porto”
LOCALIZACAO
Figura 12 : Árvore de análise algébrica
2. Análise e simplificação
Neste passo, eliminam-se as redundâncias:
Ex.
O.orcamento > 30.000.00 AND O.orcamento > 45.000.00
Passa a ser apenas : O.orcamento > 45.000.00
Verificam-se disjunções e negações. No exemplo seguinte é necessário
alertar o utilizador da impossibilidade de tuplos resultado.
Ex.
O.orcamento > 30.000.00 AND O.orcamento < 20.000.00
3. Reestruturação
De modo a minimizar a quantidade de dados a transmitir, tenta-se “puxar” o
SELECTS para baixo, na árvore.
45
Bases de Dados Distribuídas
?
nome
? O.localizacao = L.codigo
?
O.orcamento > 30.000.00
OBRA
?
localizacao = “Porto”
LOCALIZACAO
Figura 13 : Árvore de análise algébrica reestruturada
Para ajudar à reestruturação devem ter-se presentes as regras de transformação
algébrica (em Anexo).
2.6.1.2 Loc alizaç ão
O objectivo desta fase é determinar que fragmentos estão envolvidos e, para
cada query global, substituir o seu programa específico e optimizar.
Junto com as regras de transformação devem usar-se as regras de redução. A
ideia é substituir as tabelas por uniões de fragmentos e então aplicar as regras de
transformação já mencionadas. Ao usar uma representação em árvore, pode ver-se
que operações podem ser feitas localmente e quais devem ser transferidas para outro
nó. Operações locais correspondem a sub-árvores onde as folhas são fragmentos
locais.
1ª regra de redução
A selecção de fragmentos com uma condição contradizendo a condição da
regra de fragmentação é vazia.
Ex.:
Divide-se OBRA em
O1 (orcamento ? 50.000.00)
O2 (orcamento > 50.000.00)
46
Bases de Dados Distribuídas
O inquérito a considerar:
SELECT nome FROM OBRA
WHERE orcamento > 70.000.00
? nome
? nome
? orcamento
? nome
?
? orcamento
=
=
?
? orcamento ? orcamento
O1
O2
O2
O1
O2
Figura 14 : Optimização de um inquérito seguindo a primeira regra de redução.
Construiu-se uma árvore de inquéritos global, traduziu-se a árvore global para
uma árvore de inquéritos fragmentada e rearranjou-se esta última, puxando as
selecções para as folhas da árvore. Finalmente, reduziu-se a árvore, eliminando as
sub-árvores onde as condições contradizem o critério de distribuição.
2ª regra de redução
Os joins podem ser simplificados, quando as relações sobre as quais vai ser
feito o join são fragmentadas de acordo com o atributo do join. Alguns deles
podem ser eliminados caso não existam linhas no join (determinadas pelos
predicados da fragmentação).
Ex. : Divide-se EMPREG e OBRA da seguinte maneira:
EMPREG1 : ? cargo=1,2
EMPREG2 : ? cargo=3,4
OBRA1 : OBRA ? local EMPREG1
OBRA2 : OBRA ? local EMPREG2
47
Bases de Dados Distribuídas
Inquérito a considerar:
SELECT * FROM EMPREG, OBRA
WHERE EMPREG.obra = OBRA.codigo
AND EMPREG.cargo=1
?
?
? local
local
OBRA1
? cargo=1,2
OBRA2
? cargo=3,4
EMPREG1
EMPREG2
Figura 15 : Árvore de análise algébrica
Para este inquérito pode facilmente deduzir-se que a sub-árvore direita pode
desaparecer, o que poupa tempo de computação e custo de comunicação do segundo
join.
2.6.1.2 O pt imizaç ão do inqué rito g loba l
Nesta fase, tenta-se encontrar um bom (não necessariamente óptimo)
escalonamento global. Para isso, existem diversas estratégias:
? Minimizar a função custo;
? Processamento distribuído de joins;
? Utilização de semi-joins – poupa-se no custo de comunicação à custa de
maior processamento local;
? Diferentes métodos de join – nested loop vs. joins ordenados (merge join
ou hash join).
48
Bases de Dados Distribuídas
É importante que o sistema mantenha alguns valores de controlo tais como:
? Custo de planos – estimativa do custo de processamento da operação
somado ao tamanho do resultado;
? Estatísticas – Obter as cardinalidades, tamanho e índice das relações. Esta
é uma função do SGBD;
? Resultados intermédios – Para os casos em que o resultado de uma
operação é o input de outra.
Como os joins são as operações mais “caras”, quer do ponto de vista
computacional, quer do ponto de vista das comunicações, apareceram vários
algoritmos com o objectivo de optimizar o seu escalonamento, entre os quais o
Distributed INGRES, o System R* e o SDD-1. Este último é orientado não ao
ordenamento dos joins, mas ao dos semi-joins 14 .
Para se ter uma ideia mais clara das características destes três algoritmos,
atente-se na tabela abaixo:
Algorit.
Função
Factores a optimizar
objectivo
Estatís- Fragmentação
joins
Tempo de respos- Tamanho das mensagens,
Dist.
Semi-
ta ou tempo total
custo do processamento
Tempo total
Nº e tamanho das
ticas
Não
1
Horizontal
Não
1,2
Não
Sim
1,3,4,5
Não
INGRE
S
R*
mensagens, IO, CPU
Tempo total
SDD-1
Tamanho das mensagens
Tabela 12 : Algoritmos de optimização de inquéritos distribuídos
Leg. : 1: cardinalidade da relação; 2: número de valores únicos por atributo; 3: factor de
selectividade do join; 4: tamanho da projecção em cada atributo do join; 5: tamanho do
atributo e do tuplo.
14
Um semi-join é vantajoso quando tamanho(?
A
(S)) + tamanho ( R ? A S) < tamanho (R)
49
Bases de Dados Distribuídas
O algoritmo Distributed INGRES :
O Distributed INGRES decompõe cada inquérito com várias variáve is numa
sequência de inquéritos com uma única variável, onde uma das variáveis é comum.
Depois de processar cada inquérito, escolhe um inquérito inicial (recorrendo, se
necessário, a heurísticas), e ordena os restantes recorrendo aos tamanhos das relações
intermédias. É necessário ter em consideração a localização distribuída de fragmentos.
É possível optimizar o resultado em relação ao custo de comunicação ou ao tempo de
resposta.
O algortimo R* :
Na versão centralizada deste algoritmo, os inquéritos (também com uma única
variável) são executados segundo o melhor caminho de acesso. Os joins são
processados, e depois, são determinados todos os ordenamentos possíveis, e é
calculado o custo de cada ordenação. No final, é escolhido o ordenamento com menor
custo.
Na versão distribuída, o custo inclui também a transmissão. É feita um busca
exaustiva da melhor solução (o que, em alguns casos, torna-se impraticável).
Existem duas formas diferentes de processar os joins neste algoritmo:
transferir todos os dados de uma vez só ou transferir os dados à medida que estes são
necessários. Na primeira abordagem, o número de mensagens é menor, mas as
transferências de dados são maiores, o que é conveniente quando as relações são
pequenas. Já a segunda abordagem implica um maior número de mensagens, com
transferências de dados menores, sendo este o caso conveniente se as relações
contiverem muitos tuplos e a selectividade for boa.
O algoritmo SDD-1 :
Este algoritmo utiliza semi-joins se estes forem vantajosos, mas não leva em
conta a possibilidade de as relações estarem fragmentadas nem replicadas. O custo de
transferir o resultado desde o nó onde o resultado final foi calculado para o nó que fez
50
Bases de Dados Distribuídas
o pedido não é considerado. É baseado no algoritmo Hill Climbing 15 , cuja estratégia é
determinar a melhor solução inicial e, iterativamente, tentar melhorá- la. A
desvantagem deste algoritmo é posta a descoberto quando existem mínimos locais: se
o escalonamento óptimo tiver um custo inicial alto, este algoritmo não o irá encontrar
porque não o terá escolhido como solução inicial.
2.7 Bases de Dados Distribuídas Móveis
Com os avanços nos sistemas móveis (portáteis, telemóveis...) começou a ser
possível a existência de bases de dados em que alguns nós não são fixos. Esta
possibilidade é bastante útil no mundo empresarial, e muito particularmente no caso
das empresas seguradoras com pequenos mediadores espalhados geograficamente,
cuja ferramenta de trabalho é apenas um portátil.
Os sistemas de computação móveis podem ser vistos como uma classe
especializada de sistemas distribuídos, onde alguns nós podem libertar-se de
operações distribuídas conjuntas, mover-se sem restrições no espaço físico e, mais
tarde, reconectarem-se a um segmento de uma rede de computadores, talvez diferente,
de modo a retomar as actividades suspensas.
Estes sistemas, para além da complexidade introduzida pela distribuição dos
dados, têm de se confrontar com as dificuldades inerentes à mobilidade:
? Os elementos móveis são pobres em termos de recursos, relativamente aos
elementos estáticos – o seu peso, tamanho, energia despendida e
características ergonómicas jogam contra a performance obtida;
? Os elementos móveis estão mais sujeitos a danos – é facilmente
constatável que um portátil tem maiores probabilidades de cair, estragar-se
devido a causas naturais (chuva, calor, etc.) ou ser roubado;
? A conectividade é muito variável em performance e confiabilidade – um
computador tem de contentar-se com uma rede sem fios, com baixa largura
de banda e possíveis falhas na cobertura (túneis, por exemplo);
15
Subida da montanha, numa tradução literal.
51
Bases de Dados Distribuídas
? Os elementos móveis dependem de fontes de energia limitada – apesar de
as baterias terem melhorado ao longo do tempo, os elementos devem
poupar o máximo de energia possível, num esforço quer ao nível do
hardware, quer do software.
Uma das características mais importantes que estes sistemas devem ter é a da
adaptividade, de modo a que possam responder com rapidez e eficiência às mudanças
a que estão sujeitos. As estratégias de adaptação variam entre o tipo laissez faire, onde
a adaptação é da inteira responsabilidade das aplicações, e o tipo applicationtransparent, onde esta responsabilidade passa a estar do lado do sistema. Como
sempre, a melhor solução reside algures no meio, na chamada adaptação applicationaware, onde existe uma colaboração entre as aplicações e o sistema. Assim, as
aplicações determinam a melhor forma de se adaptarem tendo em conta as suas
necessidades e características (algo que falhava na segunda abordagem, já que o
sistema não tem esses conhecimentos), enquanto o sistema monitoriza os recursos e
decide quais as alocações a realizar (o que faltava na primeira estratégia).
A agilidade é a medida da capacidade de o sistema responder prontamente a
perturbações como a diminuição da largura de banda ou da energia disponível. Um
sistema deve ser ágil, mas não em demasia, sob pena de se tornar instável,
consumindo todos os recursos ao reagir à mínima perturbação e, por isso, realizando
pouco processamento útil.
Quando se fala em sistemas móveis, fala-se no conceito de célula. A área
geográfica do sistema está dividida em células, cada uma das quais servida por uma
estação base (base station). Cada estação base está ligada à rede fixa e fornece uma
ligação sem fios entre o utilizador móvel e o resto da rede. Adicionalmente, pode
existir uma hierarquia de servidores de localizações, ligados entre si e às estações
base, por uma rede normal. Os servidores de localizações são, como o seu nome
indica, responsáveis por manterem as localizações dos utilizadores, quer sob a forma
de célula, quer sob uma forma aproximada: uma zona, ou uma partição de células.
52
Bases de Dados Distribuídas
Figura 16 : Exemplo do tipo de células existentes numa rede móvel16
Utilizando esta última abordagem, evitam-se constantes actualizações da
localização, que se pode tornar demasiado exigente em termos de recursos. Já não é
necessário saber a localização exacta do utilizador, mas apenas a célula onde ele se
encontra. No entanto, esta ignorância acerca da localização exacta deve ser limitada,
isto é, não deve estar muito longe da verdade. Quando se pretende localizar um
utilizador procuramos a sua célula. Mas, esta pode variar ao longo do dia, da semana e
até do mês. De facto, uma pessoa passa algumas horas do dia em casa, outras no
emprego, ao fim de semana pode variar um pouco o percurso... Ao criar um perfil de
utilizador, esta tarefa pode ser facilitada: monitorizando a actividade do utilizador
(número de chamadas, deslocações ao longo do dia e da semana... ) obtém-se uma
série de localizações prováveis ao longo do tempo. Quando é necessário localizar um
utilizador começa-se por procurar nos locais indicados pelo perfil.
Os algoritmos de localização de utilizadores mais utilizados variam entre:
1. Broadcast – é iniciado dentro da partição. O custo é dependente do
número de estações base dentro da partição;
16
http://www.csse.monash.edu.au/courseware/cse5501
53
Bases de Dados Distribuídas
2. Serviços centrais – é mantida uma base de dados das localizações actuais,
centralizada logicamente;
3. Home bases – cada computador móvel tem o seu servidor centralizado.
Pode criar problemas de disponibilidade;
4. Apontadores – de cada vez que existe uma deslocação, é criado um
apontador para a nova localização na antiga localização.
O modelo cliente / servidor foi ligeiramente modificado nos sistemas móveis.
Devido às características intrínsecas destes sistemas, por vezes, a diferença entre
clientes e servidores é esbatida:
? Limitações nos recursos forçam a que algumas actividades dos clientes
tenham de ser migradas para servidores;
? Algumas actividades dos servidores têm de ser migradas para os clientes
devido à baixa largura de banda e a desconexões.
Estas situações são apenas temporárias, em ocasiões em que o desempenho e a
disponibilidade do sistema assim o exigem. Durante a execução normal do sistema, os
servidores continuam a ser a fonte fiável dos dados, enquanto os clientes (em maior
número e mais propensos a falhas) podem aceder a esses mesmos dados.
Baseado também no modelo cliente / servidor, o modelo de agentes móveis
veio substituir a tecnologia RPC. Um agente móvel é um programa de software que se
pode deslocar autonomamente de uma máquina para outra, decidindo que nós visitar e
que instruções processar. Pode até suspender a execução num determinado ponto,
transportar-se para uma outra máquina e continuar a execução, a partir do ponto onde
a tinha interrompido (no caso dos agentes móveis com forte mobilidade). As
diferenças em relação ao RPC residem na forma como os pedidos são tratados: em
vez de serem requisitados, os procedimentos em si são fornecidos, assim como os
dados e o estado.
Os agentes têm grande utilidade no acesso a SGBDs baseados na tecnologia
Web, podendo ser utilizados entre clientes e servidores. O cliente envia um agente ao
servidor remoto. Uma vez no servidor, o agente móvel encarrega-se de iniciar os
drivers necessários (tipicamente JDBC ou Java), liga-se à BD, realiza o inquérito e
54
Bases de Dados Distribuídas
leva os resultados de volta ao cliente. As vantagens deste esquema são óbvias: o
cliente torna-se mais leve e portável, remetendo a responsabilidade da activação dos
drivers para os agentes, melhorando assim o seu desempenho.
Nos sistemas móveis, os agentes beneficiam da sua extrema mobilidade para
de deslocar para diferentes nós devido ao dinamismo do ambiente: recursos
computacionais, capacidade da bateria, memória, largura de banda e desconexões, etc,
etc.
A segurança é outro problema agravado pela mobilidade: é mais fácil
interceptar as comunicações móveis; os próprios portáteis estão mais sujeitos a ser
roubados, e com eles, informações confidenciais.
A encriptação dos dados é uma solução possível, assim como a utilização de
esquemas de autenticação do tipo login/password.
Replicação
Os dados devem ser guardados próximo dos nós onde vão ser requisitados,
para assegurar a sua utilização eficiente e para que os tempos de acesso a estes
mesmos dados sejam reduzidos. Dados cujo número de leituras ultrapasse o de
escritas devem ser replicados, mas quando as actualizações são constantes, a
necessidade de manter os dados consistentes torna-se um sério problema em sistemas
onde a disponibilidade, assim como a largura de banda é baixa.
A replicação, mesmo a dos servidores, deve ser optimista: caso ocorram
conflitos existem mecanismos de reparação baseados em logs, mecanismos
específicos às aplicações, ou até mesmo
mecanismos de detecção que implicam
resolução manual.
As caches dos computadores desempenham um importante papel na
replicação. A utilização da cache pode melhorar bastante o desempenho dos sistemas
(uma boa parte das operações é, normalmente, feita em condições de fraca
conectividade). A estratégia de manutenção de informação nas caches deve ser
cuidadosamente pensada, já que os tempos de resposta nos sistemas móveis têm
prazos extremamente limitados. De modo a que esta técnica seja efectiva foram
criados mecanismos de validação rápida da cache e reintegração da propagação de
actualizações.
55
Bases de Dados Distribuídas
A criação de cópias primárias virtuais pretende aumentar a disponibilidade dos
sistemas. Duas cópias actuam como uma única cópia primária, para que, se uma das
cópias não estiver disponível, as transacções possam continuar. A sincronização é
feita mais tarde, ou quando o elemento móvel se conecte novamente.
No sistema Bayou17 foi implementada uma outra abordagem, a read-any /
write any, que permite que o utilizador possa ler e/ou escrever em qualquer cópia
existente na BD, mesmo quando desconectado. Para impedir que os dados fiquem
inconsistentes, foi adoptado um protocolo anti-entropia que, basicamente, assegura
que todas as cópias da BD irão eventualmente convergir para o mesmo estado, se não
existirem novas actualizações. Periodicamente, cada servidor selecciona outro para
uma troca de actualizações. No final, os dois servidores terão cópias idênticas da base
de dados, isto é, terão as mesmas actualizações e na mesma ordem.
O modelo two-tier é uma outra abordagem para tentar resolver o problema da
replicação nos sistemas móveis. As versões das réplicas podem variar entre master
(valor mais recente obtido de um nó base) e tentativa (valor mais recente devido a
actualizações locais); as transacções podem ser do tipo base (apenas para réplicas
master) e tentativa (apenas para réplicas tentativa). Estas últimas originam novas
versões tentativa e uma transacção base para ser processada mais tarde. Uma
transacção base gerada por uma tentativa pode falhar ou produzir resultados
diferentes. Uma transacção tentativa falha se a transacção base não tiver “critério de
aceitação”. Assim, a BD master está sempre num estado de convergência, e nós
móveis apenas precisam de contactar os nós base para verificar se as suas transacções
são aceitáveis.
Gestão de Transacções
Devido às constantes falhas, os sistemas podem ter de desligar, mesmo que
existam transacções pendentes. O Gestor de Transacções de um destes sistemas deve
ainda ser capaz de distinguir uma simples desconexão momentânea e uma falha. Para
que não seja necessário proceder a constantes rollbacks, foram criadas alternativas:
17
O sistema Bayou é uma plataforma de BDD móveis com elevados níveis de disponibilidade e
consistência, onde é possível construir aplicações colaborativas.
56
Bases de Dados Distribuídas
? Transacções com pontos de controlo (savepoints) – Nos pontos de
controlo, os resultados são guardados para o caso de ocorrer uma falha. Se,
de facto, esta ocorrer, pode recomeçar a partir desse ponto;
? Transacções em cadeia – É uma variante da anterior, mas os savepoints
foram substituídos por pontos de commit. A transacção, em caso de falha,
recomeça a partir desse ponto, mas não pode ser rolled back para além
dele. Os locks podem ser libertos nestes pontos, se não forem mais
necessários, mas os resultados apenas são visíveis no final da transacção
global;
? Transacções aninhadas – Cada transacção é dividida numa hierarquia de
sub-transacções. Cada uma pode fazer commit ou rollback, mas a
transacção pai tem de fazer commit para que os subcommits tenham efeito;
? Transacções multi-nível – Estas combinam as propriedades das
transacções em cadeia e das aninhadas. Uma transacção multi- nível é
equivalente a uma aninhada, mas é permitido antecipar o commit de uma
sub-transacção. Se a transacção pai for rolled back, existem transacções
compensatórias para desfazer semanticamente a sub-transacções originais.
O sistema Coda introduziu o conceito de transacções isolation-only (apenas
isolamento). A ideia é incorporar selectivamente os conceitos de ACID transacções,
fazendo exigências mínimas aos clientes móveis, tipicamente com poucos recursos.
A seriazibilidade pode ser assegurada por métodos de Two-Phase Locking e
timestamp, ou até controlo optimista da concorrência. Se for possível manter o
sistema num estado inconsistente, desde que não afecte as necessidades das
aplicações, deve utilizar-se essa estratégia, porque permite um maior grau de
concorrência e melhor desempenho.
Processamento de Questões
O novo problema levantado pela mobilidade dos sistemas prende-se com o
conhecimento impreciso sobre as localizações dos utilizadores. Como minimizar os
custos de comunicação para “descobrir” a informação em falta para completar o
inquérito? Mesmo depois de descoberta a estratégia com custo mínimo, o trabalho do
processamento de questões não acabou. Num ambiente em constante mudança, os nós
57
Bases de Dados Distribuídas
escolhidos para processar a questão podem falhar, e outros, que anteriormente
estavam desconectados, podem estar novamente operacionais. Os planos de execução
devem ser optimizados regularmente, durante o processamento, permitindo que o
sistema se adapte dinamicamente às flutuações nos recursos, às características dos
dados e às preferências do utilizador. Reoptimizar um plano de execução nestas
condições requer cuidados extra na manutenção dos estados da execução. As alturas
ideais para proceder a esta reoptimização são aquelas em que a execução alcança o
chamado “momento de simetria”, onde os operadores algébricos podem facilmente
ser reordenados. Para uma maximização destes momentos, os joins a utilizar nestes
sistemas seriam preferencialmente os da família Ripple Join. Esta família de
algoritmos é baseada no conceito de pipeline. O processamento do join é feito em
“rectângulos” e, no fim de cada rectângulo, a procura pode ser adaptada às mudanças
que se vão operando no desempenho e/ou nas estatísticas obtidas.
2.8 Recentes avanços na tecnologia das BDD
Os sistemas de BD do modelo relacional estão em uso há bastantes anos e
servem bem os propósitos das aplicações tradicionais com tipos de dados simples,
como são os numéricos e textuais.
Porém, as aplicações têm mudado radicalmente, necessitando de novos tipos e
modelos de dados, sem deixarem de necessitar de alguns dos serviços fornecidos
pelos SGBD, tais como a persistência, confiabilidade e a consistência. As
telecomunicações, a multimédia e os sistemas de informação geográfica são apenas
alguns exemplos de aplicações que precisam de modelos de dados complexos e de
novos tipos de operações (por vezes, até dependentes do tipo de informação), que o
modelo relacional não oferece.
Para ultrapassar estes problemas foram criadas as bases de dados orientadas a
objectos (OODB), as bases de dados objecto-relação (ORBD) e as bases de dados de
3ª geração.
58
Bases de Dados Distribuídas
Bases de Dados Orientadas a Objectos
Uma BDOO é uma colecção de objectos, cada um deles com um OID
(identificador único do objecto), um estado (colecção de valores associados às
propriedades do objecto) e um comportamento (descrito pelos métodos que podem ser
invocados pelo objecto). O uso de tipos e valores complexos permite associar a um
objecto uma estrutura arbitrária, o que no modelo relacional só é possível recorrendo à
utilização de múltiplas relações. Além disso, o valor de uma propriedade de um
objecto pode ser o OID de um outro objecto, implementando assim, uma referência.
Os objectos têm um tipo associado e uma classe (implementação):
? o tipo é uma abstracção que descreve o estado e o comportamento do
objecto;
? a classe descreve a implementação do tipo: estrutura dos dados e
implementação dos métodos, ou seja, a codificação dos métodos numa
linguagem de programação OO.
O SQL não é adequado para trabalhar com este modelo, daí a necessidade de
criação da ODL (Object Definition Language) para a definição dos dados e sua
estrutura, e da OQL (Object Query Language), baseada na SQL3.
Exemplo de OQL:
SELECT DISTINCT O.codigo
FROM O in OBRA
WHERE O.localizacao = "Porto"
As BDOO têm várias vantagens. O novo modelo de dados é mais baseado no
mundo real, facilitando a sua compreensão. Como os objectos não precisam de ser
“compostos” a partir das suas tabelas, o tempo necessário para o processamento é
bastante reduzido. A reutilização de objectos reduz os custos de desenvolvimento, e o
controlo de concorrência é simplificado, porque é possível colocar um lock numa
classe, mas mantendo ainda assim a capacidade de colocar um lock num objecto
individual. E, muito importante para este estudo, adaptam-se bem ao modelo
distribuído.
Porém, este modelo também acarreta alguns problemas: alguns acessos podem
ser mais lentos (cálculo de médias de valores existentes na BD, por exemplo) e a falta
59
Bases de Dados Distribuídas
de standards suficientemente difundidos (a OQL pode ser a solução para este
problema) são duas desvantagens importantes.
Objecto
OBRA = 1
Obra
ORCAMENTO = 300000,00
EMPREGADOS
next
next
nil
Objecto
Empregado
EMPREGADO = 1
NOME = F.Rodrigues
EMPREGADO = 3
NOME = A. Silva
OBRA
Figura 17: Modelo dos Objectos da Relação Obra-Empregados
Bases de Dados Objecto-Relação
Este modelo é uma evolução do modelo relacional e manteve a
compatibilidade com este. Foi introduzido um novo modelo de dados, que permite a
criação de tipos de tuplos (possibilidade de estruturas complexas e hierarquias) e de
tipos abstractos. Também foram introduzidas alterações na SQL2, dando origem à
SQL3. Com a SQL3 é possível procurar referências, indicar OIDs, aceder a estruturas
internas e aninhar e desaninhar objectos.
Um exemplo de aninhação :
SELECT localizacao, SET(nome)
FROM EMPREG
GROUP BY localizacao
Bases de Dados de 3ª Geração
Foram uma resposta à necessidade de envolver o modelo de dados relacional,
mantendo a compatibilidade e, ao mesmo tempo, permitir a definição de objectos e
regras complexas. As BDs multimédia por exemplo, permitem fazer inquéritos com a
60
Bases de Dados Distribuídas
mesma estrutura do SQL (à parte estruturada da informação) e outros inq uéritos
baseados em condições de semelhança (que necessitam de técnicas ad-hoc e,
normalmente, produzem resultados probabilísticos). Por exemplo, a procura de
documentos na Internet necessita de:
? Técnicas comuns (procura por palavras chave, exclusão de out ras);
? Mudar a implementação conforme a língua;
? Indicadores de qualidade da procura (percentagem de documentos
relevantes entre os extraídos, percentagem de documentos relevantes entre
os documentos relevantes existentes na BD);
? Técnicas físicas (matrizes e índices, por ex.).
Já na representação de dados espaciais (GIS), o maior problema é encontrar
uma estrutura de dados que permita responder eficientemente aos inquéritos.
A tecnologia de BDs com base no paradigma Object Oriented coloca uma
série de que stões de implementação:
? A representação de objectos pode ser do tipo horizontal (onde cada
objecto é colocado junto à classe a que pertence) ou vertical (onde os
objectos são divididos nas suas propriedades e estas são guardadas
adjacentemente). Porém, não pode existir fragmentação nestes sistemas, já
que isso poria em causa o encapsulamento. A fragmentação deve mesmo
ser proibida através de restrições de integridade explícitas;
? A representação dos identificadores pode utilizar um endereço físico ou
um surrogate (um valor simbólico único, associado ao objecto, o que
implica a criação de estruturas de acesso adequadas);
? Índices complexos que permitam procura directa ou inversa. Cada tipo de
dados deve ter mecanismos de índices próprios;
? A arquitectura cliente/servidor foi modificada, permitindo o uso de
operações de check in e check out de objectos. Os clientes podem importar
os objectos e manipulá- los localmente.
Tal como no modelo relacional, o acesso à BDD é controlado através de uma
classificação dos seus elementos. O elemento básico de classificação é o objecto. O
61
Bases de Dados Distribuídas
acesso é permitido se o utilizador tiver acesso aos métodos do objecto. Uma vantagem
que este modelo tem sobre o relacional é a existência de encapsulamento: as
instâncias de objectos remotos não têm acesso aos dados do objecto invocado,
mantendo mais facilmente a sua integridade.
O controlo de acesso pode ser feito no nó origem de um modo semelhante ao
do modelo relacional. Porém, como não há uma definição clara de cliente e servidor
nestes sistemas, o controlo de acesso realizado nos nós remotos é impraticável,
acarretando a desvantagem já apresentada (maior probabilidade de acessos não
autorizados).
62
Bases de Dados Distribuídas e SQL Server
3. O Microsoft S QL Se rve r
Tendo em vista as necessidades das empresas, os criadores de servidores de
bases de dados apressaram-se a fornecer suporte às BDDs. As empresas cujos
servidores estão mais implantados no mercado (Microsoft, Oracle, IBM e Sybase) já
têm soluções que respondem a algumas das necessidades das empresas que desejam
distribuir os seus dados e o seu processamento.
Empresa
Produto
Características mais importantes
IBM
DataPropagator Relational
Adaptada à DB2;
(DpropR)
Replicação assíncrona e de primary site;
Nós read-only subscrevem para o primary
site;
Subscrição de subconjunto ou resultado da
query.
Distributed Relational Database
BDs heterogéneas.
Arquitecture (DRDA)
DataJoiner
Middleware para acesso a BDs de outros
fabricantes.
Sybase
Replication Server
Nó primary site e nós read-only distribuídos;
Replicação síncrona;
Replicação hierárquica;
Dados e stored procedures replicados.
Oracle
SQL Anywhere
BDs móveis.
OmniSQL
BDs heterogéneas.
Table Snapshot Option
Snapshots periódicos enviados para os nós
read-only;
Symmetric Replication Option
Replicação síncrona e assíncrona de qualquer
nó para qualquer outro nó;
Refrescamento diferencial;
Agentes controlam a replicação;
Two-Phase Commit.
63
Bases de Dados Distribuídas
Microsoft
Microsoft SQL Server
Nó primary site e nós read-only distribuídos;
Modelo com publicadores e subscritores;
Uma BD pode passar cópias de publicações
para outros nós;
BDs móveis.
Tabela 13: produtos BDD e suas características mais importantes.
Uma vez que o exemplo que irá ser apresentado neste trabalho irá utilizar o
Microsoft SQL Server, passa-se a apresentar com maior pormenor esta solução da
Microsoft Corp.
3.1 Replicação no Microsoft SQL Server
O modelo de replicação utilizado baseia-se no conceito de Publicadores e
Subscritores. Um publicador é o servidor que disponibiliza a outros servidores dados
para replicação. Adicionalmente detecta quais foram as alterações aos dados e
mantém informação sobre todas as suas publicações. Um subscritor é um servidor que
guarda os dados replicados e recebe as alterações. Um distribuidor é um servidor que
contém metadados, registos históricos e transacções (estas últimas para publicações
transaccionais).
Uma publicação é um conjunto de dados a ser replicado. Estes dados podem
ser provenientes de uma tabela, de um fragmento de uma tabela ou pode até ser um
stored procedure. As subscrições dividem-se em dois tipos: push (subscrição
“empurrada”) e pull (subscrição “puxada”). No primeiro tipo, o publicador propaga as
alterações sem a existência de um pedido para o fazer. Já no segundo tipo, o
subscritor pede periodicamente as actualizações ao publicador.
Um immediate updating subscriber é um subscritor que pode actualizar um
determinado conjunto de dados, assim como o publicador. Porém, quando altera os
dados, tem de reflectir essa actualização imediatamente para o publicador (e outros
subscritores do tipo immediate updating que eventualmente existam), numa
transacção utilizando o protocolo Two-Phase Commit (2PC). O 2PC é controlado pelo
Microsoft Distributed Transaction Coordinator (MSDTC). Depois de a alteração ser
publicada no Publicador, vai ser publicada em todos os subscritores desta publicação.
64
Bases de Dados Distribuídas e SQL Server
Esta tarefa pode não ser logo efectuada, mas apenas aquando da próxima actualização
agendada.
Existem três tipos de replicação no Microsoft SQL Server:
-
snapshot – quando existem poucos dados numa relação ou quando estes
não são actualizados com muita frequência;
-
transaccional – quando as actualizações são mais frequentes ou quando o
volume de dados é muito grande para ser actualizado de uma vez só;
-
merge – quando todos os servidores podem alterar os dados, funcionando
como publicadores e subscritores ao mesmo tempo.
Na mesma aplicação podem usar-se diferentes tipos de replicação, dependendo
das necessidades de consistência dos dados, da autonomia dos nós e dos recursos ao
nível da rede.
A replicação snapshot é o tipo de replicação mais simples. É recolhida uma
imagem da BD num dado momento e enviada aos subscritores, o que, no caso de
grandes volumes de dados, requer recursos substanciais da rede. Ao contrário da
publicação do tipo transaccional (que envia as operações aos dados) ou da publicação
do tipo merge (que envia as modificações aos dados), o snapshot não necessita de
uma monitorização constante das alterações aos dados, sobrecarregando menos a
máquina de replicação. Os subscritores são do tipo read-only, ou seja, apenas podem
ler os dados, nunca actualizá- los. A consistência não deve ser um requisito constante e
obrigatório, porque os dados podem não ser imediatamente publicados em todos os
subscritores. Os snapshots podem ser agendados para determinadas alturas do dia,
aproveitando, preferencialmente, as alturas de baixa actividade dos nós. A opção
immediate updating subscribers pode aplicar-se a este tipo de replicação.
Os nós publicadores na replicação transaccional não enviam todos os dados
para os subscritores, mas sim as operações efectuadas sobre esses dados. Quando o
subscritor requisita os dados pela primeira vez, é necessário copiar a publicação
actual, completamente, do publicador para o subscritor. A este processo dá-se o nome
de aplicação de sincronização. Depois, o transaction log é utilizado para captar as
65
Bases de Dados Distribuídas
operações que vão afectando os dados (INSERT, UPDATE, DELETE...), e estas são
propagadas (normalmente em tempo real) para os subscritores e aplicadas
ordenadamente. A opção immediate updating subscribers pode aplicar-se a este tipo
de replicação.
A replicação do tipo merge sincroniza as alterações entre o publicador e os
subscritores que possam efectuar alterações aos dados. O publicador não impõe
automaticamente as suas alterações em caso de conflito: o “desempate” é determinado
por critérios pré-estabelecidos. Estes critérios podem ser, por exemplo, regras de
prioridade: a actualização efectuada primeiro é a que prevalece. Da mesma forma que
na replicação do tipo transaccional, é necessário obter um snapshot inicial (a
publicação corrente) do esquema e dados da tabela. Este esquema favorece a
autonomia, porém a consistência transaccional não está garantida. Ou seja, o valor
final que irá ser guardado nas BDs poderá não ser igual ao valor que seria obtido se
todas as alterações tivessem sido efectuadas num único nó. Assim, se a aplicação
necessitar de integridade, mas não a puder garantir, este tipo de replicação não deverá
ser utilizado.
Os conflitos são detectados através de uma coluna chamada “lineage”, que
representa a história das alterações numa linha. Aquando de uma actualização, se uma
determinada linha foi alterada recentemente, a lineage em cada nó é verificada. Se
houver algum conflito, é feita uma reconciliação automática.
A figura abaixo mostra as diferenças entre os vários tipos de replicação, em
termos de autonomia dos nós e consistência transaccional obtida:
66
Bases de Dados Distribuídas e SQL Server
Autonomia dos nós
Consistência Transaccional
Replicação
Repl. Tran-
Repl.
Immediate
Distributed
Merge
saccional
Snapshot
Updating
Transaction
Subscriber
Coordinator
Figura 18 : Diferentes Tipos de Replicação em termos de autonomia dos nós e consistência
transaccional 18
3.2 Fragmentação no Microsoft SQL Server
A fragmentação é possível no Microsoft SQL Server. Para uma determinada
tabela, são criadas as chamadas tabelas- membro, cada uma com um conjunto dos
tuplos da tabela original. Depois, são criadas partitioned views (vistas fragmentadas),
uma em cada servidor que contenha uma tabela- membro. As vistas, no SQL Server
podem ser do tipo local, ou do tipo distribuído. As vistas do tipo local obtêm todos os
seus dados em fragmentos existentes no servidor local; as do tipo distribuído têm de
recorrer a pelo menos um fragmento remoto. Além disso, as vis tas podem ser
actualizáveis ou read-only.
As vistas fragmentadas de cada tabela devem ter o mesmo nome em todos os
servidores. Assim, os inquéritos que invoquem a vista, podem- na invocar da mesma
maneira em qualquer servidor, facilitando a transparência em termos de localização.
Vamos considerar, por exemplo, uma BDD com dois servidores (serv1 e
serv2). Pretende-se fragmentar uma tabela com o nome TOMADOR, cuja chave é o
campo tomID.
18
Ajuda On-Line da Microsoft – MSDN Library, October 2001
67
Bases de Dados Distribuídas
Em serv1:
CREATE TABLE tomador_1
( tomID INTEGER PRIMARY KEY CHECK(tomID BETWEEN 1 and 500),
... (restantes definições das colunas da tabela) )
Em serv2 :
CREATE TABLE tomador_2
( tomID INTEGER PRIMARY KEY CHECK(tomID BETWEEN 501 and 1000),
... (restantes definições das colunas da tabela) )
Depois de se criar os fragmentos, deve-se criar uma linked server definition
para serv2. Uma linked server definition é uma ligação para outro servidor contendo
informação de conexão. Uma vez criada esta ligação é possível criar as particioned
views:
Em serv1:
CREATE VIEW tomador AS
SELECT * FROM db1.tomador_1
UNION ALL
SELECT * FROM serv2.db1.tomador_2
Deve-se fazer algo semelhante em serv2.
A fragmentação vertical também é possível, mas as regras de particionamento
são bastante restritas, de modo a fazer respeitar as regras de integridade. Só pode ser
aplicada uma única restrição à coluna de particionamento. Todas as outras restrições
serão ignoradas.
Depois de as vistas terem sido criadas, acede-se aos dados através delas. Como
já foi referido, as vistas podem ser actualizáveis, devendo para isso ser estruturadas
utilizando a expressão UNION ALL, como no exemplo atrás referido. Se a vista se
referir a uma única tabela, ou seja, não existe fragmentação, a vista também é
actualizável. Assim, as operações de INSERT, UPDATE e DELETE são aplicadas à
vista, que se encarrega de alterar a tabela correspondente. Estas operações, para terem
sucesso, devem obedecer a um conjunto de regras.
68
Bases de Dados Distribuídas e SQL Server
As regras para a operação de INSERT em tabelas são as seguintes:
? Todas as colunas devem ser incluídas no INSERT, mesmo que a coluna
possa ser NULL na tabela base, ou mesmo que exista uma restrição
DEFAULT definida na tabela base;
? A expressão DEFAULT não pode ser utilizada;
? O valor da coluna de particionamento deve respeitar a lógica da restrição
CHECK que existir para essa coluna;
? Os INSERTs não são permitidos se na tabela base existir uma coluna com
a propriedade identidade;
? Os INSERTs não são permitidos se a tabela membro contiver uma coluna
timestamp;
? Os INSERTs não são permitidos se houver um self-join com a mesma
vista ou qualquer uma das tabelas base.
As regras para a operação de UPDATE em tabelas são as seguintes:
? Os UPDATEs não podem utilizar um DEFAULT, mesmo que a coluna
tenha essa palavra chave na sua definição;
? O valor da coluna com a propriedade identidade não pode ser alterado:
contudo, as outras colunas podem;
? O valor da chave primária não pode ser alterado se a coluna contiver dados
do tipo text, image ou ntext;
? Os UPDATEs não são permitidos se a tabela base contiver uma coluna
timestamp;
? Os UPDATEs não são permitidos se houver um self-join com a mesma
vista ou qualquer uma das tabelas base;
? A palavra chave DEFAULT não pode ser especificada na cláusula SET do
UPDATE.
Existe uma única regra para a operação de DELETE em tabelas:
? Os DELETEs não são permitidos se houver um self-join com a mesma
vista ou qualquer uma das tabelas base.
69
Bases de Dados Distribuídas
3.3 Transacções no Microsoft SQL Server
Devido às dificuldades levantadas pela gestão de transacções distribuídas, a
Microsoft criou o Microsoft Transaction Server (MTS). Este tem um interface
simples, de modo a facilitar a compreensão do utilizador ao mesmo tempo que gere
eficientemente as transacções. O MTS define um modelo de programação para
desenvolver aplicações distribuídas. Estas são construídas utilizando controlos Active
X, e depois a infraestrutura de gestão das transacções é- lhes adicionada. Assim, as
soluções criadas são as mais adequadas a cada caso.
Além de ajudar no desenvolvimento da aplicação, o MTS realiza outras tarefas
de suporte:
? Gere os recursos de baixo-nível dos sistemas (processos e threads, por
exemplo);
? Sincroniza os acessos aos dados partilhados;
? Guarda informações sobre os utilizadores para que o trabalho de uns não
interfira com o dos outros;
? Gere a segurança do sistema;
? Gere e configura as aplicações de modo a que estas se adaptem às
necessidades dos utilizadores.
A transparência transaccional é suportada: a transacção é gerida internamente
pelo SQL Server, quase como se fosse local. A maior diferença reside no processo de
COMMIT, controlado como auxílio do 2PC. Para este passo é utilizado o Microsoft
Distributed Transaction Manager (ou outro que suporte a especificação X/Open/XA).
Este tem a função de coordenar os gestores de recursos 19 de todos os servidores que
participam na transacção. O próprio SQL Server pode funcionar como gestor de
recursos. Os nós têm de estar disponíveis e ligados à rede, o que reduz a sua
autonomia. Mais tarde, numa outra transacção, os dados são publicados para os
restantes subscritores, num exemplo de replicação assíncrona ou lazy. Esta
actualização aos outros servidores pode ser agendada para um determinado período do
dia, ou pode ser imediatamente realizada. Para a detecção de conflitos é utilizado um
mecanismo de timestamp.
19
Um gestor de recursos é o software que controla cada recurso da transacção distribuída.
70
Bases de Dados Distribuídas e SQL Server
Uma transacção pode ser despoletada de duas formas: através de comandos de
TRANSACT-SQL (normalmente um script delimitado pelos comandos “BEGIN
DISTRIBUTED TRANSACTION” e “COMMIT/ABORT TRANSACTION”), ou
através de uma stored procedure escrita numa qualquer linguagem de programação.
Para o suporte às transacções, a Microsoft colocou ao dispor o SQL-DMO
(Distributed Management Objects). Os objectos de SQL-DMO podem ser invocados
por qualquer linguagem que suporte COM e OLE 2.0. O seu objectivo é definir todos
os aspectos da BD e seus serviços: bases de dados, regras, triggers, tabelas, etc. Mais
abaixo pode ver-se um exemplo em Visual Basic da definição de um objecto SQLDMO e sua conexão a um servidor com
nome “NomeServidor”, login “sa” e
password “ ”:
Dim ServerObject As New SQLOLE.SQLServer
ServerObject.Connect “NomeServidor”, “sa”, “ ”
3.4 Processamento Distribuído de Questões no
Microsoft SQL Server
As opções para o processamento distribuído de questões devem ser definidas
através do SQL Server Enterprise Manager. Este é um interface gráfico que dá acesso
a todas as funcionalidades da BD, sem que seja necessário introduzir comandos SQL.
Estas opções podem pertencer a dois níveis: o nível do provider OLE DB,
configuradas no registry do sistema operativo, ou o nível do servidor ligado (linked
server). As opções ao nível do provider afectam todas as definições de servidores
ligados que usem o mesmo provider OLE DB. Ao nível do provider temos a
possibilidade de permitir inquéritos aninhados ou parametrizados e acessos ad-hoc,
entre outras. Ao nível do servidor ligado, é possível definir timeouts no acesso a
servidores, por exemplo.
Mesmo que os servidores não sejam ligados, é possível executar inquéritos
distribuídos. Porém, em vez de o Microsoft Distributed Transaction Manager
(MSDTC) tratar o inquérito como distribuído, são lançados stored procedures no
servidor remoto, como parte da transacção distribuída.
71
Bases de Dados Distribuídas
Já ao nível da optimização de inquéritos distribuídos, o SQL Server realiza
dois tipos de optimização específicos:
? execução remota de inquéritos com os OLE DB SQL Command Providers;
? acesso indexado com os OLE DB Index Providers.
O primeiro tipo de optimização tenta dividir o inquérito e passar os subinquéritos que afectam dados remotos para o servidor que contém esses mesmos
dados, de modo a reduzir o número de tuplos retornados.
O segundo tipo de optimização tenta utilizar os índices do Index Provider para
avaliar condições e realizar operações de ordenação em tabelas remotas, de modo a
realizar rapidamente as procuras à BD.
Existe uma ferramenta gráfica, o SQL Query Analyzer, que mostra o plano de
execução de um dado inquérito. Os sub- inquéritos remotos são assinalados para uma
maior percepção daquilo que se está a passar.
72
O caso GIS Mediadores
4. O caso GIS Mediadore s
O software GIS Mediadores é um conjunto de sub- módulos integrados sob um
interface de gestão. Os módulos são adicionados ao conjunto consoante as
necessidades do mediador. Também a BD de suporte terá mais ou menos tabelas
consoante os módulos adicionados. Algumas das tabelas podem ver-se a seguir:
TOMADOR(tomador, nome, morada, idade, num_contrib,...)
PRODUTO(produto, codigo, designacao, abreviatura...)
COMPANHIA(companhia, codigo, designacao, morada ...)
SEGURO(seguro, regime, tomador, data de inicio, data de termo ...)
RECIBO(recibo, seguro, produto, companhia, apolice, tomador...)
Um cenário típico é o de um mediador cuja sede tem uma base de dados
com estas tabelas (e muitas outras, com certeza, mas que de momento não têm
interesse para este trabalho). Espalhados pelo país existem outros mediadores
a realizar algumas operações de cobrança e angariação de novos clientes.
Os mediadores-filial (chamemos-lhes assim) têm na sua própria BD algumas
das tabelas existentes na BD do mediador-sede, provavelmente fragmentadas por
situação geográfica, ou seja, fragmentadas pela localização do mediador. A
fragmentação não será apenas horizontal, mas mista, pois os mediadores não precisam
de aceder a todos os dados que a BD da sede contém, mas apenas aos mais
importantes.
As tabelas TOMADOR, SEGURO e RECIBO serão actualizadas por todos os
nós envolvidos (cada servidor actualizará o fragmento local, minimizando assim a
possibilidade de conflitos). A tabela PRODUTO será actua lizada apenas na
sede, já que novos produtos serão lançados pela sede e nunca por um mediador-filial.
A tabela COMPANHIA terá um processamento semelhante à tabela PRODUTO,
73
Bases de Dados Distribuídas
já que apenas a sede terá autorização para trabalhar com novas companhias,
um mediador-filial nunca poderá tomar essa liberdade.
O tipo de replicação mais adequado para as tabelas SEGURO, RECIBO e
TOMADOR será a do tipo merge, já que permite que qualquer nó actualize os dados,
incluindo nós móveis. Como os dados estão fragmentados por área geográfica e só a
sede tem todos os dados, os conflitos serão minimizados, de modo a garantir a
consistência dos dados. Relembra-se que a replicação do tipo merge não garante a
consistência: a aplicação é que a deve garantir.
As tabelas que não são alteráveis pelas filiais (tabelas PRODUTO e
COMPANHIA), serão alteradas apenas na sede. Essas alterações serão depois
publicadas seguindo a estratégia snapshot, numa subscrição do tipo push. Já que todos
os mediadores devem saber os produtos existentes, não há necessidade de pedirem as
actualizações a esta tabela: os dados são- lhes imediatamente enviados.
Para que estas tabelas sejam replicadas, é necessário criar uma publicação no
servidor da sede. Para este passo existe um wizard que guia o utilizador, explicando
todas as alternativas existentes para a criação de uma publicação.
Figura 19 : Publicações existentes no servidor
74
O caso GIS Mediadores
As propriedades da publicação podem facilmente ser alteradas para reflectir as
necessidades da aplicação. Como já foi explicado, cria-se um snapshot inicial para
que o subscritor contenha o esquema da BD e os dados das tabelas. Isso pode ser feito
na tab "Status", fazendo correr o agente do snapshot.
Figura 20 : Propriedades de uma publicação
No servidor do subscritor cria-se uma pull subscription para os dados da tabela
TOMADOR, RECIBO e SEGURO, com a ajuda de um wizard, que, como no caso da
publicação, ajuda o utilizador a configurar a subscrição que pretende.
Na prática, este esquema é um pouco difícil de gerir, pois as actualizações
implicam quase sempre a existência de conflitos. Por exemplo, o caso de um
mediador que introduz na tabela TOMADOR um registo com dados do tomador com
código 1. Na sede, é possível que nesse momento, esteja a ser introduzido um registo
na tabela TOMADOR, também com esse código. Quando as alterações do mediador
são enviadas para a sede e é feito o merge da tabela, os dados que o mediador
75
Bases de Dados Distribuídas
introduziu entrarão em conflito com os que entretanto foram introduzidos na sede.
Um dos registos será necessariamente descartado, mas irá ser registado numa tabela
do
sistema,
cujo
nome
obedece
aos
seguintes
critérios:
conflit_<NomeDaPublicação>_<NomeDaTabela>. Esta tabela irá possibilitar que os
dados não sejam completamente perdidos: é possível criar um programa que, aquando
da existência de conflitos verifica essa tabela e recupera os dados, inserindo-os na
tabela TOMADOR, desta vez com outro código.
Figura 21 : O Replication Conflict Viewer ajuda à visualização dos conflitos existentes durante a
fase de junção das BDs.
Este processamento pode introduzir muito overhead, porque quem introduziu
os dados do tomador, deve ter introduzido dados noutras tabelas, com informação
baseada num código que, afinal, foi alterado. É necessário actualizar também essas
tabelas de modo a que não existam inconsistências no final.
Isto seria feito num módulo à parte, mas já dentro do GIS Mediadores.
Quando o programa detectasse que tinham existido conflitos na fase do merge,
lançaria um procedimento que iria repor os dados. No fim informava o utilizador das
76
O caso GIS Mediadores
alterações efectuadas. Se existissem conflitos que o programa não conseguisse
resolver, informaria o utilizador e esperaria por uma decisão.
A replicação, como já foi indicado anteriormente, traz mais benefícios quando
os dados são lidos muitas vezes pelos servidores remotos, mas poucas vezes
actualizados, devido à carga adicional que é colocada sobre o sistema para manter as
réplicas consistentes.
77
Conclusões
5. Conclusõe s
Este trabalho abordou o tema das Bases de Dados Distribuídas.
Em primeiro lugar foram apresentados os conceitos teóricos: desde a
arquitectura de uma BDD até ao processamento distribuído de questões, passando
pelas alternativas de replicação e gestão de transacções distribuídas. As novas
configurações não foram esquecidas: as BDs móveis e aquelas baseadas no paradigma
Object Oriented. As BDs móveis têm especial interesse para este trabalho devido à
sua utilização no cenário GIS Mediadores.
De seguida apresentou-se a solução da Microsoft para a gestão de um sistema
servidor de BD que suporte distribuição. Os pormenores de implementação,
replicação, gestão de transacções e de inquéritos distribuídos foram clarificados para
melhor se perceber o trabalho prático efectuado.
Por último, simulou-se a criação de uma publicação num servidor de BD e de
uma subscrição noutro servidor de modo a que estes pudessem trocar dados. O
trabalho que seria efectuado num cenário real seria em tudo semelhante ao efectuado
aqui.
O modelo das Bases de Dados Distribuídas é, de facto, o melhor para o caso
de grandes corporações que desejam distribuir os seus dados e o seu processamento
por áreas geográficas dispersas. Replicando e fragmentando os dados, alcançando
novas maneiras de os gerir e processar inquéritos, tem-se o melhor desempenho,
respeitando as necessidades de cada aplicação em termos de autonomia e acesso aos
dados. O crescimento do número de utilizadores móveis a que se tem assistido
também irá desempenhar um papel importante, já que a melhor solução para o seu
caso também passa pelas BDDs. Permitindo que estes tenham acesso aos dados das
outras BDs e os possam alterar, mesmo desconectados, cria-se uma nova estratégia
mais adequada ao seu trabalho e às condições em que o efectuam. Espera-se que os
conceitos principais tenham sido clarificados de modo a dar a entender o grande
potencial que este modelo tem.
79
Bases de Dados Distribuídas
Bibliograf ia
Livros:
PEREIRA, José Luís – Tecnologia de Bases de Dados, Lisboa, FCA - Editora
de Informática, 2ª edição actualizada e aumentada, Outubro de 1998.
Revistas:
Personal Computer World – Ed. Portuguesa, nº 159 de Março de 2000, vol.
14.
Ajuda on- line da Microsoft (MSDN) – Federated Databases
Sites na Internet:
http://bridge.ecn.purdue.edu/~yiguo/dropbox/w2000.pdf
http://csrc.nist.gov/nissc/1996/papers/NISSC96/paper072_073_074/
SCO_.PDF
http://domino.research.ibm.com/cambridge/research.nsf/
2b4f81291401771785256976004a8d13/c71ebac11ec6e54f8525661600797829/$FI
LE/mobile.pdf
http://ftp.research.microsoft.com/pub/debull/A00JUN_CO.pdf
http://geog-www.sbs.ohio-state.edu/faculty/ mkwan/Paper/jdm_2000.pdf
http://hst.home.cern.ch/hst/phd.htm
http://ipdps.eece.unm.edu/1998/wpdrts/kylam.pdf
http://sistemas.ing.ula.ve/sistemas/bd/bdDist.pdf
http://storacle.princeton.edu:9001/oracle8-doc/ server.805/a58247/toc.htm
http://technet.oracle.com/deploy/performance/pdf/FederatedvsClustered.pdf
http://vyaskn.tripod.com/federated.htm
http://www.ccs.neu.edu/home/salzberg/com3560/
http://www.chest.ac.uk/software/objectivity/docs/technical-overview.html
http://www.comp.nus.edu.sg/~cs5225/
http://www.computing.surrey.ac.uk/personal/st/D.Barton/CS363/2-DistribDB4up.pdf
81
Bases de Dados Distribuídas
http://www.cs.adfa.oz.au/teaching/studinfo/dsd/index.html
http://www.cs.mcgill.ca/~kemme/cs577/main.html
http://www.cs.purdue.edu/AnnualReports/95/AR95Book-74.html
http://www.cs.rutgers.edu/dataman/papers/vldb92.pdf
http://www.cs.ualberta.ca/~database/ddbook.html
http://www.cs.wustl.edu/~schmidt/corba-overview.html
http://www.csse.monash.edu.au/courseware/cse5200
http://www.csse.monash.edu.au/courseware/cse5501/
http://www.ctit.utwente.nl
http://www.ctit.utwente.nl/programme/disciplines/db.html
http://www.db.uwaterloo.ca/~tozsu/ddbook/notes.html
http://www.dcs.bbk.ac.uk/WebDyn/WebDynPapers/ishikawa.pdf
http://www.dis.port.ac.uk/~chandler/OOLectures/database/database.htm
http://www.eecs.umich.edu/courses/eecs684/
http://www.engr.smu.edu/~mhd/8391f01/MCDBpresentation.ppt
http://www.ifip.or.at/con2000/icct2000/icct382.pdf
http://www.prato.linux.it/~gbartolini/pdf/mysql.pdf
http://www.sei.cmu.edu/str/descriptions/com.html
http://www.unab.edu.co/editorialunab/revistas/rcc/r21_art2_c.pdf
http://www-2.cs.cmu.edu/afs/cs/project/coda/Web/docdir/
http://www-hbp.usc.edu/LAB/cshahabi.html
http://wwwinfo.cern.ch/db/aboutdbs
http://xerox.elet.polimi.it/dbbook/slides.html
82
Bases de Dados Distribuídas
Glossário
Adaptabilidade – característica de um módulo de software que consegue satisfazer
exigências de diferentes sistemas e necessidades de diferentes utilizadores.
Consistência – qualidade dos dados que estão de acordo com as restrições de
integridade da base de dados onde se encontram armazenados.
Consistência Transaccional – depois de ser efectuada uma transacção distribuída, os
resultados serão iguais aos obtidos por uma transacção efectuada num único nó.
Interoperabilidade – a capacidade que dois os mais sistemas ou componentes têm de
trocar informação e de utilizar essa mesma informação.
Manutenibilidade – a facilidade com que um sistema ou componente de software
pode ser manutenível, isto é, pode ser modificado para corrigir falhas, melhorar o
desempenho (ou outros atributos), ou até mesmo ser adaptado a um ambiente diverso.
Reutilizabilidade – característica de um módulo de software ou outro produto que
pode ser utilizado em mais do que uma aplicação ou sistema de software.
Seriazibilidade – quando várias transacções estão a ser executadas concorrentemente,
os resultados devem ser iguais àqueles obtidos quando as transacções são executadas
em série, numa determinada ordem.
83
Bases de Dados Distribuídas
Índice Remissivo
2
2PC (Two-Phase Commit), 37, 38, 39, 64, 70, 87,
99
P
Processamento distribuído de questões, 19, 42, 43,
44, 71, 79
2PL (Two-Phase Locking), 40, 87
R
A
Replicação, 2, 11, 19, 22, 23, 24, 25, 26, 34, 55, 56,
Alocação, 2, 21, 34, 41, 43
63, 64, 65, 66, 70, 74, 77, 79
Arquitectura cliente/servidor, 61
T
F
Timestamp, 26, 40, 41, 57, 69, 70
Fragmentação, 2, 11, 18, 19, 21, 28, 29, 30, 31, 32,
34, 43, 46, 47, 61, 67, 68, 73
Transacção, 19, 23, 24, 25, 35, 36, 37, 38, 39, 40,
41, 56, 57, 64, 70, 71, 83, 100
Transacção distribuída, 35, 70, 71, 83
85
Bases de Dados Distribuídas
Siglas
2PC
Two-Phase Commit
2PL
Two-Phase Locking
API
Application Program Interface (Interface de Programação de Aplicações)
BD
Base de Dados
BDD
Base de Dados Distribuída
IDL
Interface Definition Language (Linguagem de Definição de Interfaces)
MSDTS Microsoft Distributed Transaction Server
MTS
Microsoft Transaction Server
SGBD
Sistema Gestor de Base de Dados
SQL
Structured Query Language (Linguagem de Inquéritos Estruturada)
LAN
Local Area Network (Rede de Área Local)
WAN
Wide Area Network (Rede de Área Alargada)
87
Bases de Dados Distribuídas
Anexos
A1 - CORBA20
A Common Object Request Broker Architecture (CORBA) é uma infrastrutura
aberta de distribuição de objectos de computação, que se tem vindo a tornar um
standard, criada pelo OMG (Object Management Group). O CORBA automatiza
muitas tarefas de programação da rede tais como registar, posicionar e activar um
objecto; desmultiplicação de pedidos; criação de frames e manipulação de erros;
marshalling e unmarshalling de parâmetros; e despacho de operações.
A figura seguinte ilustra os componentes preliminares da arquitectura do
Modelo da Referência do OMG. As descrições destes componentes estão disponíveis
mais abaixo.
Figura 22 : Arquitectura do Modelo de Referência da OMG
? Serviços do Objecto -- São interfaces independentes do domínio, usados por
muitos programas de objectos distribuídos. Por exemplo, um serviço que
descobre outros serviços disponíveis é quase sempre necessário, qualquer que
seja o domínio da aplicação. Dois exemplos de Serviços do Objecto que
cumprem este papel são:
o Serviço nomeadores - permitem que os clientes encontrem objectos
baseados em nomes;
o Serviço negociadores - permitem que os clientes encontrem
objectos baseando-se nas suas propriedades.
20
Baseado na informação disponível no site http://www.cs.wustl.edu/~schmidt/corba-overview.html
89
Bases de Dados Distribuídas
Existem também especificações de Serviços do Objecto para a gestão do ciclo
de vida, da segurança, de transações e notificações de eventos, assim como
muitos outros.
?
Common Facilities (facilidades comuns) – Tal como os interfaces de Serviço
do Objecto, são também orientados horizontalmente, mas ao contrário dos
Serviços do Objecto o seu objectivo são as aplicações do utilizador final. Um
exemplo é o Distributed Document Component Facility (Componente
Distribuído do Documento - DDCF), uma facilidade criada a partir da
Common Facility, baseada em OpenDoc. O DDCF permite a apresentação e o
intercâmbio de objectos baseados num modelo de documento, por exemplo,
facilitando a ligação de um objecto spreadsheet com um relatório.
?
Interfaces do Domínio -- Estes interfaces fornecem serviços semelhantes aos
dos Serviços do Objecto e dos Common Facilities, mas são orientados para
domínios específicos da aplicação. Por exemplo, um dos primeiros RFPs do
OMG emitidos para Interfaces do Domínio é orientado para o domínio do
fabrico (Product Data Management Enablers – serviços de gestão de produtos
de dados). Outros RFPs da OMG serão emitidos para os domínios das
telecomunicações, médicos, e financeiros.
?
Interfaces da Aplicação -- Desenvolvidas especificamente para uma dada
aplicação. Porque são específicas às aplicações, e porque o OMG não
desenvolve aplicações (somente especificações), estes interfaces não são
standard. Porém, se serviços úteis para outras aplicações emergirem de um
domínio particular, podem tornar-se candidatos a serem standars futuros da
OMG.
CORBA ORB Architecture
A seguinte figura ilustra os componentes principais da arquitectura do
CORBA ORB.
Figura 23: Arquitectura CORBA ORB
90
Bases de Dados Distribuídas
?
Objecto -- Entidade de programação do CORBA, composta por uma
identidade, uma interface e uma implementação, conhecida por Servant.
?
Servant (empregado) -- Entidade da linguagem de programação da
implementação que define as operações que suportam um interface de
CORBA IDL. Os servants podem ser escritos numa grande variedade de
linguagens, incluindo C, C++, Java, Smalltalk, e Ada.
?
Cliente -- Entidade do programa que invoca uma operação de uma
implementação do objecto. Invocar os serviços de um objecto remoto deve ser
transparente para o invocador. Idealmente, deve ser tão simples quanto
chamar um método num objecto, isto é, obj->op(args). Os componentes
restantes na figura 2 ajudam a suportar este nível de transparência.
?
Object Request Broker (ORB) -- O ORB fornece um mecanismo para
comunicar de um modo transparente pedidos de clientes para as
implementações de objectos. O ORB simplifica a programação distribuída ao
libertar cliente dos detalhes da invocação dos métodos. Isto faz com que os
pedidos dos clientes pareçam ser chamadas locais aos procedimentos. Quando
um cliente invoca uma operação, o ORB é responsável por encontrar a
implementação do objecto, activando-a transparentemente se necessário,
entregando o pedido ao objecto, e retornando as respostas ao invocador.
?
Interface ORB -- Um ORB é uma entidade lógica que pode ser implementada
de várias maneiras (tal como um ou mais processos ou conjunto de
bibliotecas). Para libertar as aplicações dos detalhes da implementação, a
especificação do CORBA define uma relação abstracta para um ORB. Esta
interface fornece várias funções de suporte tais como conversões de
referências de objectos para strings e versa vice; criação de listas de
argumentos para pedidos feitos através do interface dinâmico de invocação
descrito abaixo.
?
Stubs and skeletons do CORBA IDL -- os stubs e os skeletons do CORBA
IDL são como que a “cola” entre o cliente e as aplicações do servidor,
respectivamente, e o ORB. A transformação entre definições de CORBA IDL
e a linguagem de programação alvo é automatizada por um compilador de
CORBA IDL. O uso de um compilador reduz o número de potenciais
inconsistências entre stubs do cliente e skeletons do servidor e aumenta o
número de oportunidades de optimizações automatizadas do compilador.
?
Invocação Dinâmica do Interface (IDI)– Este interface permite que um
cliente aceda directamente aos mecanismos subjacentes do pedido fornecidos
por um ORB. As aplicações usam o IDI para emitir dinamicamente pedidos
aos objectos sem requerer stubs específicos aos quais iriam ser ligados. Ao
contrário dos stubs de IDL (que permitem apenas pedidos do género do RPC),
o IDI permite também que os clientes façam chamadas síncronas adiadas que
não bloqueiam (operações de envio e recepção separadas), chamadas de
sentido único (apenas envio).
?
Interface Skeleton Dinâmico (ISD) – Este é o análogo ao IDI do lado cliente
para o lado servidor. O ISD permite que um ORB entregue pedidos a uma
implementação do objecto, que não tenha conhecimento em tempo de
91
Bases de Dados Distribuídas
compilação do tipo do objecto que está a executar. O cliente que faz o pedido
não faz ideia de se a implementação está a usar os skeletons específicos ao tipo
do IDL ou se está a usar os skeletons dinâmicos.
?
Adaptador do objecto -- Suporte para o ORB, que entrega os pedidos ao
objecto e activa-o. Mais importante, o adaptador do objecto associa as
implementações ao ORB. Os adaptadores do objecto podem ser especializados
de modo a fornecer o suporte a determinados estilos de implementação do
objecto (tais como adaptadores do objecto OODB para persistência e
adaptadores do objecto de biblioteca para objectos não-remotos).
?
GIOP (General Inter-ORB protocol) – Protocolo Geral Inter-ORB. Especifica
a sintaxe de transferência e um conjunto standard de formatos de mensagens
para a interoperação ORB através de qualquer meio de transporte orientado à
conexão.
?
IIOP (Internet Inter-ORB protocol) – Protocolo Internet Inter-ORB.
Especifica como o GIOP pode ser implementado usando o TCP/IP.
92
Bases de Dados Distribuídas
A2 - COM21
COM refere-se tanto a uma especificação como a uma implementação desenvolvida
pela Microsoft Corporation, que fornece uma estrutura para componentes integrados. Esta
estrutura suporta a interoperabilidade e reutilizabilidade de objectos distribuídos, permitindo
que os programadores construam sistemas através da junção de componentes reutilizáveis
de vendedores diferentes, que comunicam através de COM. Aplicando o COM à construção
de sistemas de componentes pré-existentes, os programadores esperam obter benefícios ao
nível da manutenção e adaptabilidade.
O COM define uma interface de programação de aplicações (API) para permitir a
criação dos componentes, que serão integrados nas aplicações feitas ou para permitir que
diversos componentes interajam. No entanto, para que interajam, os componentes devem
aderir a uma estrutura binária especificada pela Microsoft.
Desde que os componentes
adiram a esta estrutura binária, componentes escritos em linguagens diferentes podem
interoperar.
O COM distribuído é uma extensão ao COM que permite a interacção de
componentes através de uma rede. Enquanto os processos COM puderem funcionar na
mesma máquina, mas em espaços de endereçamento diferentes, a extensão de DCOM
permite que os processos estejam espalhados através da rede. Com o DCOM, componentes
que operam numa variedade das plataformas podem interagir, desde que o DCOM esteja
disponível dentro desse mesmo ambiente.
Pode considerar-se que o COM e o DCOM são uma única tecnologia. Esta fornece
uma variedade de serviços para a interacção de componentes, desde serviços que
promovem a integração de componentes numa única plataforma, até à interacção de
componentes através das redes heterogéneas.
De facto, o COM e as suas extensões
DCOM estão unidas num único runtime. Este fornece o acesso local e remoto.
Enquanto o COM e o DCOM representam a tecnologia "de baixo nível" que permite
que os componentes interajam, o OLE, o ActiveX e o MTS representam serviços de
aplicação de alto nível, construídos com base no COM e DCOM. O OLE, construído com
base no COM, fornece serviços tais como linkagem e embedding de objectos usados na
criação de documentos compostos (documentos gerados a partir de múltiplas ferramentas).
O ActiveX prolonga as potencialidades básicas para permitir que componentes sejam
embebidos em Web sites. O MTS prolonga as potencialidades do COM com serviços para
empresas tais como transacções e segurança. Estes permitem que os Enterprise Information
21
Baseado na informação disponível no site http://www.ccs.neu.edu/home/salzberg/com3560/
93
Bases de Dados Distribuídas
Systems (Sistemas de Informação de Empresas) sejam construídos usando componentes de
COM. COM+ é a evolução de COM.
COM+ integra serviços de MTS e queuing (colocação em fila) de mensagens no
COM, e torna a programação de COM mais fácil através de uma integração mais próxima
com linguagens da Microsoft como Visual Basic, Visual C++, e J++. COM+ adicionará não
somente qualidade aproximada à do MTS em cada objecto COM+, mas esconderá também
algumas das complexidades da codificação de COM.
Detalhes Técnicos
O COM é uma especificação binária de compatibilidade e implementação associada
que permite que os clientes invoquem os serviços fornecidos por componentes compatíveis
com COM (objectos COM). Como se pode ver na figura 1, os serviços implementados pelos
objectos COM são expostos através de um conjunto de interfaces que representam o único
ponto do contacto entre clientes e o objecto.
Figura 24: Cliente a utilizar um objecto COM através de um apontador para um Interface
O COM define uma estrutura binária para o interface entre o cliente e o objecto. Esta
estrutura binária fornece a base para a interoperabilidade entre os componentes de software
escritos em várias linguagens. Desde que o compilador possa reduzir as estruturas das
linguagens para esta representação binária, a linguagem de implementação de clientes e
objectos COM não é importante - o ponto do contacto é a representação binária runtime.
Assim, os objectos COM e os clientes podem ser codificados em qualquer linguagem que
suporte a estrutura binária do COM.
O objecto COM pode suportar qualquer número de interfaces. Um interface fornece
uma colecção agrupada de métodos relacionados. Por exemplo, a figura 2 descreve um
objecto COM que simula um relógio. IClock, IAlarm e ITimer são os interfaces do objecto
relógio. O interface IClock pode fornecer os métodos apropriados (não mostrados) para
permitir ajustar e ler a hora actual. Os interfaces IAlarm e ITimer podem fornecer métodos de
alarme e cronómetro.
94
Bases de Dados Distribuídas
Figura 25: Objecto COM relógio
Os objectos e os interfaces COM são especificados utilizando a Interface Definition
Language (Linguagem de Definição de Interfaces) da Microsoft, uma extensão do standard
do DCE Interface Definition Language. Para evitar colisões de nomes, cada objecto e cada
interface deve ter um identificador único.
Os interfaces são considerados logicamente imutáveis. Uma vez definido, não deve
ser alterado – novos métodos não devem ser adicionados e métodos existentes não devem
ser modificados.
Esta limitação aos interfaces não é forçada, é sim, uma regra que os
programadores de componentes devem seguir. Aderir a esta limitação remove as potenciais
incompatibilidades nas versões – se um interface nunca muda, os clientes que dependem
desta podem confiar nesse conjunto consistente de serviços. Se uma funcionalidade nova
tiver de ser adicionada a um componente, pode ser exposta através de um interface
diferente.
Cada objecto COM é executado dentro de um servidor. Um único servidor pode
suportar múltiplos objectos COM. Como se pode ver na figura 3, há três maneiras de um
cliente aceder aos objectos COM fornecidos por um servidor:
1.
Servidor In-process: O cliente pode ligar-se directamente a uma biblioteca
que contém o servidor. O cliente e o servidor executam no mesmo processo.
Uma comunicação é realizada através de chamadas a funções;
2.
Objecto Proxy Local: O cliente pode aceder a um servidor que está a
executar num processo diferente, mas na mesma máquina, através de um
mecanismo de comunicação inter-processos.
Este mecanismo é, de facto,
uma Remote Procedure Call (RPC) leve.
3.
Objecto Proxy Remoto: O cliente pode aceder um servidor remoto que está a
executar numa outra máquina. A comunicação entre o cliente e o servidor é
realizada através de DCE RPC.
O mecanismo que suporta o acesso aos
servidores remotos é chamado DCOM.
95
Bases de Dados Distribuídas
Figura 26: Três métodos para aceder a objectos COM
Se o cliente e o servidor estiverem no mesmo processo, partilhar os dados entre os
dois é simples. Mas, quando o processo do servidor está separado do processo do cliente,
como num servidor local ou remoto, o COM deve formatar e preparar os dados de modo a
que os possa partilhar. Este processo de preparar os dados é chamado marshalling. O
marshalling é realizado através de um objecto proxy e de um objecto stub que lidam com os
detalhes da comunicação de processos cruzados para qualquer interface (descrita na figura
4). O COM cria o stub no processo do servidor do objecto e manda o stub controlar o
verdadeiro apontador do interface. O COM cria então o proxy no processo do cliente, e liga-o
ao stub. O proxy fornece então o apontador do interface ao cliente.
O cliente chama os interfaces do servidor através do proxy, que faz o marshal dos
parâmetros e passa-os para o stub do servidor. O stub faz o unmarshal dos parâmetros e
realiza a chamada dentro do objecto servidor.
Quando a chamada termina, o stub faz
novamente o marshal dos valores de retorno e passa-os para o proxy, que, por sua vez, os
retorna ao cliente. O mesmo mecanismo de proxy/stub é usado quando o cliente e o servidor
estão em máquinas diferentes. Porém, a implementação interna de marshalling e
unmarshalling difere, dependendo de se o cliente e o servidor operam na mesma máquina
(COM) ou em máquinas diferentes (DCOM).
Dado um ficheiro IDL, o compilador de
Microsoft IDL pode criar o proxy default e o código do stub que executa todo o marshalling e
unmarshalling necessário.
96
Bases de Dados Distribuídas
Todos os objectos COM estão registados numa base de dados de componentes.
Quando um cliente deseja criar e utilizar um objecto COM:
1.
Invoca uma API COM para instanciar um novo objecto COM.
2.
O COM localiza a implementação do objecto e inicia um processo servidor para o
objecto.
3.
O processo do servidor cria o objecto, e retorna um apontador para o interface
do objecto.
4.
O cliente pode então interagir com o objecto COM recentemente instanciado
através do apontador para o interface.
Um aspecto importante no COM é que os objectos não têm identidade, isto é, um
cliente pode pedir um objecto COM de algum tipo, mas não um objecto em particular. De
cada vez que o COM é invocado, para pedir um objecto COM, uma nova instância é
retornada. A vantagem principal desta política reside em que as implementações COM
podem juntar os objectos COM numa pool e retornar estes mesmos objectos aos clientes
que os pediram. Sempre que um cliente terminou de utilizar um objecto, a instância é
devolvida à pool. Porém, existem mecanismos para simular a identidade em COM tais como
monikers.
97
Bases de Dados Distribuídas
A3 - ODBC22
Open Database Connectivity (ODBC)
? É um interface de aplicação proposto pela Microsoft em 1991 para a
construção de aplicações de bases de dados heterogéneas, suportada pela
maioria dos produtos relacionais;
? A linguagem suportada pelo ODBC é apenas o SQL, caracterizado por um
conjunto mínimo de instruções;
? As aplicações interagem com os servidores de SGBD através de um driver
(uma biblioteca dinamicamente ligada às aplicações). O driver esconde as
diferenças de interacção devido ao SGBD, o sistema operativo e o
protocolo de rede. Por exemplo, o trio (Sybase, Windows/NT, Novell)
identifica um driver específico
? O ODBC não suporta o protocolo two-phase commit.
Figura 27 : Arquitectura do ODBC
Componentes do ODBC
? A aplicação lança inquéritos SQL;
? O gestor do driver ODBC carrega os drivers a pedido da aplicação e fornece
funções de conversão de nomes. Este software é fornecido pela Microsoft;
? Os drivers realizam funções ODBC. Executam inquéritos SQL, traduzindo-os,
se necessário, para os adaptar à sintaxe e semântica de produtos específicos;
? A origem de dados é o SGBD remoto, que realiza as funções transmitidas pelo
cliente.
22
Baseado em Paulo Atzeni, Stefano Ceri, Stefano Paraboschi e Ricardo Torlone – Database Systems –
Concepts, Languages and Architectures, McGraw-Hill,
1999
–
livro
disponível
no
site
http://xerox.elet.polimi.it/dbbook/slides.html
98
Bases de Dados Distribuídas
A4 - X Open DTP23
X-Open protocolo distribuído de processamento de transacções (DTP)
? Protocolo que garante a interoperabilidade das transacções em SGBDs de
fornecedores diferentes;
? Assume a existência de um cliente, diversos RMs (Resource Manager –
Gestores de Recursos) e um TM
(Transaction Manager – Gestor da
Transacção);
? O protocolo consiste em duas interfaces:
o Entre o cliente e o TM, chamada interface TM;
o Entre o TM e cada RM, chamada interface XA.
? Os SGBDs relacionais devem fornecer a interface XA.
Vários produtos especializados na gestão de transacções, tal como o Encina
(um produto da Transarc) e o Tuxedo (da Unix Systems, originalmente AT&T)
fornecem o TM.
Características mais importantes do X-Open DTP
? Os RM são passivos; respondem às chamadas remotas a procedimentos
(remote procedure calls) emitidas pelo TM;
? O protocolo utiliza o 2PC com duas optimizações: aborto presumido
apenas leitura;
? O protocolo suporta decisões heurísticas, que na presença de falhas,
permitem a evolução de uma transação sob o controlo do operador
o quando um RM está bloqueado devido a uma falha do TM, um
operador pode impor uma decisão heurística (geralmente o abort),
permitindo assim a libertação de recursos;
o quando as decisões heurísticas causam uma perda de atomicidade, o
protocolo garante que os processos do cliente são notificados;
o a resolução de inconsistências devidas as decisões heurísticas erradas
é dependente da aplicação.
23
Baseado em Paulo Atzeni, Stefano Ceri, Stefano Paraboschi e Ricardo Torlone – Database Systems –
Concepts, Languages and Architectures, McGraw-Hill,
1999
–
livro
disponível
no
site
http://xerox.elet.polimi.it/dbbook/slides.html
99
Bases de Dados Distribuídas
Figura 28: Interacções entre cliente, TM and servidor com o protocolo X-OPEN DTP
Interface TM
? tm_init e tm_exit iniciam e terminam o diálogo entre cliente e TM;
? tm_open e tm_term abrem e fecham a sessão com o TM;
? tm_begin inicia uma transacção;
? tm_commit pede um commit global.
Interface XA
? xa_open e xa_close abrem e fecham a sessão entre o TM e um RM;
? xa_start e xa_end activam e completam uma nova transacção;
? xa_precom pede ao RM para que este realize a primeira fase do protocolo
de commit. O processo RM apenas pode responder positivamente à
chamada se se encontrar num estado recuperável;
? xa_commit e xa_abort comunicam a decisão global acerca da transacção;
? xa_recover inicia o procedimento de recuperação depois da falha de um
processo (TM ou RM); o RM consulta o seu log e constrói três conjuntos de
transacções: transacções em dúvida, transacções decidas por um commit
heurístico e transacções decidas por um abort heurístico.
? xa_forget permite que um RM esqueça as transacções decididas de um
modo heurístico.
100
Bases de Dados Distribuídas
A5 - Regras de Transformação Algébrica24
Legenda :
8 - Join
? - Projecção
? - Selecção
? - União
1.
Comutatividade das operações binárias
R8 S=S8 R
2.
Associatividade das operações binárias
(R 8 S) 8 T = R 8 (S 8 T)
3.
Idempotência
?
x
( ? y (A) ) = ? x (A)
Duas projecções podem ser reduzidas a uma se os atributos da projecção
exterior forem um subconjunto dos atributos da projecção interior.
? x (? y (A)) = ? y (? x (A)) = ? x? y (A)
As selecções são comutativas e podem ser reescritas com AND
4.
Comutatividade da selecção e projecção
A selecção e a projecção podem ser comutadas, desde que, depois da
projecção os atributos da selecção ainda existam
SELECT nome FROM OBRA
WHERE orcamento > 30.000.00
Se for feita primeiro a projecção, temos um problema...
5.
Comutatividade da selecção com operações binárias
? y (A 8 B) = ? y1 (A) 8 ? y2 (B)
24
Baseado em Betty Salzberg, Algorithms for Parallel and Distributed Transaction Systems,
informação disponível no site http://www.ccs.neu.edu/home/salzberg/com3560
101
Bases de Dados Distribuídas
É possível comutar a selecção com operações binárias desde que
? y = y1 AND y2 e
? y1 contenha apenas atributos de A, e y2 contenha apenas atributos de B
(alguns atributos podem estar em A e B).
? y (A ? B) = ? y (A) ? ? y (B)
Porque nas uniões A e B têm os mesmos atributos.
Ex.:
SELECT nome FROM EMPREG
WHERE cargo=1
Supondo que EMPREG está fragmentada em dois fragmentos:
EMPREG1 e EMPREG2.
?
?
cargo=1
?
=
?
EMPREG1
EMPREG2
cargo=1
EMPREG1
?
cargo=1
EMPREG2
Figura 29 : Árvore de Análise Algébrica
6.
Comutatividade da projecção com operações binárias
É possível comutar a projecção com operações binárias. A relação entre
projecções e joins é um pouco complicada.
? y (A 8 z B) = ?
y1
(A) 8 z ?
y2
(B) se
? z está em y1 AND y2 e
? y1 contém apenas atributos de A e
? y2 contém apenas atributos de B e
? y é igual à união de y1 com y2
102
Bases de Dados Distribuídas
Se z não estiver em y:
? y (A 8 z B) = ? y (?
y1,z(A)
8z ?
y2,z(B))
se
? y1 contém apenas atributos de A e
? y2 contém apenas atributos de B e
? y é igual à união de y1 com y2
Ex. :
SELECT nome
FROM EMPREG E, CARGO C
WHERE E.cargo = C.codigo
?
?
nome
8
8
E.cargo = C.codigo
E.cargo = C.codigo
=
?
EMPREG
nome
nome, cargo
?
codigo
CARGO
EMPREG
CARGO
Figura 30: Árvore de Análise Álgébrica
7.
Distributividade de joins sobre uniões
(A 8 B) 8 C ) = (A 8 C )? (B 8 C)
8.
Distributividade de agregações sobre uniões
sumc (A ? B) = sum(cA) + sum(cB)
count (A ? B) = count(A) + count(B)
avgc (A ? B) = _sum(cA) + sum(cB)_
count(A) + count(B)
onde c é a coluna comum a A e B
103
Download