Beruflich Dokumente
Kultur Dokumente
1. Introduo
A utilizao de bancos de dados distribudos (BDD) motivada pela possibilidade de
integrar fontes de dados em pontos geogrficos distintos, permitindo com que o usurio
visualize o conjunto de dados como uma nica unidade. As consultas em BDD so
executadas distintamente em cada stio do BD e os resultados agrupados para formar um
nico conjunto dando a impresso ao usurio que existe somente um BD lgico.
Esse trabalho prope a utilizao de drivers JDBC como responsvel pelo
gerenciamento das consultas em BDD. Com isso pode-se desenvolver uma aplicao
que tradicionalmente acessaria um nico BD e utiliz-la para acesso em BDD.
O driver JDBC uma camada de abstrao que permite a um programa Java
utilizar uma interface padro para acessar um BD relacional atravs da SQL (Ramon,
2001). Essa camada composta por classes e interfaces que as aplicaes Java
instanciam para enviar expresses SQL ao BD e obter resultados dessas requisies. Os
fabricantes de BD que desejarem ter seus sistemas acessveis por aplicaes feitas em
Java devem desenvolver um driver JDBC para seu BD. A abstrao que o driver oferece
permite que uma aplicao seja independente do fabricante de BD. No momento de
executar a aplicao que se decide que driver de fabricante utilizar e estabelece-se a
conexo com esse BD.
O mesmo acontece ao utilizar o driver proposto nesse trabalho: a aplicao que
foi desenvolvida acessando um nico BD, ao definir que utilizar o driver desse trabalho
poder acessar BDD.
Para que possam ser executadas consultas em BDD se faz necessrio identificar
os stios de cada BD, assim como as equivalncias entre os esquemas, ou seja, o nome
das tabelas e colunas podem ser distintos em cada BD e uma consulta, ao ser distribuda
entre os stios, precisa ser alterada para acessar as tabelas e as colunas equivalentes. Para
criar essa equivalncia preciso fazer o mapeamento entre os BD, que zsu e Valduriez
(2001) denominam de Esquema Conceitual Global (ECG).
Nesse trabalho foi desenvolvido um editor de ECG, onde se criam os
mapeamentos entre os BD. Esse editor salva o esquema num arquivo, de formato XML,
que deve ser acessvel ao driver JDBC. Baseado nesse ECG o driver transforma as
consultas para atender cada BD. Com esse ECG possvel para o driver tratar a
fragmentao horizontal, ou seja, as linhas das tabelas de BD distintos formam uma
nica tabela lgica para o usurio.
Esse artigo estruturado da seguinte forma: primeiro apresentada uma breve
fundamentao sobre BDD, ECG e fragmentao horizontal; em seguida descrita a
API JDBC; na seo subsequente apresentado o driver JDBC e o editor de ECG
desenvolvido para depois mostrar um exemplo de sua utilizao. Por ltimo so feitas as
consideraes finais onde so evidenciadas as vantagens e limitaes do driver, assim
como sugestes para trabalhos futuros.
3. API JDBC
A API JDBC a interface de programao de aplicaes que prov acesso de dados
nico para a linguagem de programao Java (Sun, 2002). Essa API responsvel por
intermediar a comunicao entre a aplicao e o SGBD. O fabricante de SGBD que
deseja disponibilizar seu sistema para aplicaes na linguagem Java devem desenvolver
um driver que siga a especificao da API JDBC.
Existem quatro categorias de tecnologias para a API JDBC:
1. JDBC-ODBC: a comunicao ocorre atravs de drivers ODBC instalados nas
mquinas clientes;
2. API Nativa: converte as chamadas do JDBC em chamadas s API nativas do
SGBD, por exemplo, usando DLLs;
3. JDBC-Net: se comunica atravs de um protocolo de rede genrico, ou seja, as
solicitaes so feitas a um intermedirio, que redireciona para o SGBD;
4. Protocolo Nativo: vai diretamente ao banco de dados, utilizando o protocolo de
rede do prprio SGBD.
As duas ltimas alternativas so consideradas as melhores na utilizao da API
JDBC, pois no exigem instalaes e configuraes nas mquinas clientes.
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306",
"root", "root");
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM CLIENTES");
while (rs.next()) {
System.out.print("Cdigo : " + rs.getInt(1));
System.out.println("Nome : " + rs.getString("DS_NOME"));
}
rs.close();
st.close();
con.close();
4. Trabalho Desenvolvido
Nessa seo ser apresentada a estrutura e o funcionamento do driver JDBC
desenvolvido nesse trabalho, assim como a ferramenta para edio do ECG.
static {
try {
java.sql.DriverManager.registerDriver(new JGDriver());
} catch (SQLException E) {
throw new RuntimeException("Falha ao registrar o driver!");
}
}
importante frisar que essa soluo faz com que a consulta processe
independente e sequencialmente em cada BD. Com isso, junes, agrupamentos e
ordenaes so executadas localmente e no globalmente.
4.2. Edio do ECG
Como comentado na seo anterior, o driver necessita de um arquivo com a
identificao dos BD envolvidos e o mapeamento das relaes globais com as locais.
Esse arquivo, que denominado como ECG, est no formato XML nesse trabalho.
Nesse arquivo so definidos os bancos de dados, as tabelas globais, e o
relacionamento entre as tabelas de cada banco com as tabelas globais. Em cada banco de
dados mantido um apelido (um nome de batismo), o nome da classe driver do JDBC, a
URL de conexo, o nome de um usurio e senha para conexo. Em cada tabela global
mantido o nome da tabela e uma lista de nomes das colunas. Em cada relacionamento
existe o nome do banco que ser mapeado, e o mapeamento entre as tabelas. Para cada
uma dessas tabelas est a equivalncia entre o nome das tabelas globais e locais, e a
equivalncia entre os nomes das colunas das tabelas globais e locais.
Para edio desse arquivo foi desenvolvida uma ferramenta visual para o
desenvolvedor da aplicao que utilizar o driver. Essa ferramenta foi dividida em trs
guias: a primeira para cadastrar os bancos de dados, a segunda para criar as tabelas
globais e a terceira para os relacionamentos.
A Figura 3 apresenta a guia onde so cadastrados os bancos de dados. Pode-se
observar nessa tela que na grade existem trs bancos de dados cadastrados.
5. Avaliao
Com o intuito de experimentar e provar a funcionalidade do driver foi elaborada uma
aplicao que possui uma nica janela com uma caixa de edio onde digitada uma
expresso SQL e uma grade para mostrar os resultados dessa consulta.
Alm disso, foram projetados trs bancos de dados em trs diferentes
fabricantes: Oracle, Firebird e MySQL. Os esquemas de cada banco de dados esto
apresentados na Figura 6. O nome de todas as tabelas difere, alm do nome e a
quantidade das colunas entre as tabelas de mesmo propsito. Por exemplo, as vendas
esto representadas por uma tabela VENDA no Oracle, TAB_VENDAS no Firebird e
VENDAS no MySQL.
Figura 6. Modelo fsico dos bancos de dados usados para testes e validao
<jg:colunaLocal>NM_PRODUTO</jg:colunaLocal>
</jg:coluna>
<jg:coluna>
<jg:colunaGlobal>VALOR_PRODUTO</jg:colunaGlobal>
<jg:colunaLocal>VL_PRODUTO</jg:colunaLocal>
</jg:coluna>
</jg:colunas>
</jg:tabela>
</jg:tabelas>
</jg:relacionamento>
</jg:mapeamentoLocal>
</jg:ecg>
Class.forName("br.furb.jdbc.JGDriver");
Connection con =
DriverManager.getConnection("jdbc:jg//"+nomeArquivo);
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(sql);
ResultSetMetaData meta = rs.getMetaData();
...
while (rs.next()) {
...
}
10
11
12
rs.close();
st.close();
con.close();
6. Consideraes finais
Ao concluir esse trabalho pde se perceber uma maior facilidade em utilizar um driver
JDBC do que um middleware na utilizao de uma aplicao. O middleware exige
instalaes adicionais na mquina do cliente, e alm disso, representa uma nova
aplicao sendo executada. Com o uso do driver JDBC proposto nesse trabalho, o
programador Java desenvolve as consultas como j vinha fazendo antes com BD no
distribudos. No caso do middleware, ao programador exigiria um aprendizado de uma
nova API, assim como a insero de cdigo especfico para dar suporte ao middleware.
Uma caracterstica nata na utilizao de drivers JDBC, que a aplicao fica
independente do BD, ou seja, se o desenvolvedor implementou uma aplicao utilizando
o driver desse trabalho, para utilizar outro driver, por exemplo para acessar uma BD
local, basta ele informar a classe do driver e montar a URL de conexo com o BD.
claro que as consultas dependem da existncia das tabelas, que esto no SELECT, no
BD local. Comparando-se os Quadros 1 e 4, verifica-se que a forma de utilizar o driver
JDBC implementado nesse trabalho no varia com a utilizao de outros drivers.
O driver aqui proposto possui limitaes na execuo das consultas no uso de
agrupamentos e ordenaes, por considerar as consultas isoladamente. Devido a esse
isolamento, tambm no possvel juntar linhas de bancos de dados diferentes.
Como sugesto de trabalhos futuros, alm de resolver esse problema, (i) precisa
ser implementada uma classe que realiza a interface PreparedStatement; (ii) quando
reconstruir uma consulta global para uma consulta local, utilizar recursos especficos do
BD, com intuito de otimizar a consulta; (iii) executar as consultas locais
concorrentemente; (iv) tratamento de linhas com mesmo significado representarem a
mesma linha, por exemplo, o mesmo cliente cadastrado em dois BD diferentes; (v) ter a
possibilidade de utilizar colunas de BD distintos nas projees, permitindo clculos
nessas consultas.
Referncias
Date, C. J. (2000) Introduo a sistemas de bancos de dados, Editora Campus.
Elmasri, R.; Navathe, S. B. (2005) Sistemas de Banco de Dados, Pearson Addison
Wesley.
zsu, T.; Valduriez, P. (2001) Princpios de sistemas de bancos de dados distribudos,
Editora Campus.
Ramon, F. (2001) JDBC 2: acesso a banco de dados utilizando a linguagem Java,
Editora Novatec.
Sun Microsystems. JDBC. (2002). http://java.sun.com/javase/6/docs/technotes/guides/jdbc/.