Esse artigo faz parte da revista Java Magazine edição 07. Clique aqui para ler todos os artigos desta edição

n>

Bancos de dados livres

Uma visão aplicada para o desenvolvedor java

  O software livre hoje é parte inte­grante da infra-estrutura de TI das grandes empresas. Quem não tem pelo menos um servidor de arquivos Linux, um firewall FreeBSD, um servidor web Apache ou DNS Bind, ou um servidor Sendmail? Muitas vezes esses softwares estão nas empresas disfarçados, incor­porados a soluções de armazenamento NAS, antivírus, portais e servidores de aplicações adquiridos dos fornecedores tradicionais do mercado. IBM, Oracle, Veritas, NAI, Sun, Intel e HP, entre outras, são grandes usuárias de tecnologias livres em suas linhas de produtos.

 

Entretanto o banco de dados é o compo­nente crítico de qualquer estrutura de TI. Todos os sistemas de informação, e conse­qüentemente a maioria das operações da empresa, dependem dele. Portanto é na­tural que haja maior resistência à adoção de bancos livres do que ao uso de outras soluções abertas.

 

O desenvolvedor Java é, em geral, mais aberto a inovações e vem adotando, em peso, softwares livres como Ant, Struts, JUnit e Tomcat. Do mesmo modo há um grande interesse da comunidade Java pelos bancos de dados livres. Neste artigo são apresentados os três bancos livres mais populares: MySQL, PostgreSQL e Firebird. Todos eles são testados e suportados por amplas comunidades de usuários e desen­volvedores, além de diversas empresas que fornecem pacotes comerciais de suporte – algumas delas brasileiras.

 

Veremos um pouco do histórico e das capacidades de cada banco, além de onde obter os respectivos drivers JDBC e como utilizá-los em aplicações Java. Ao final, apresentaremos um tutorial sobre o HSQLDB, um banco de dados livre puro-Java.

Choque cultural

Para muitas empresas, adotar um banco livre pode ser um choque cultural. Com o passar do tempo, a disputa por cada vez mais funcionalidades entre os fornecedores e a necessidade de apresentar uma linha de produtos “completa” para minimizar o ris­co de migração dos usuários para softwares concorrentes levaram a produtos grandes e complexos, que demoram a serem domi­nados e podem ser muitas vezes “canhões para matar uma mosca”. É portanto parte da cultura dos bancos proprietários disponi­bilizar todas as ferramentas em um único pacote, freqüentemente tornando difícil integrar utilitários de terceiros.

 

No mundo livre, um software cumpre com uma única tarefa. Portanto um banco de dados livre fornece apenas o gerencia­dor de banco de dados (SGBD) em si e as ferramentas essenciais de administra­ção, como um monitor SQL e software de backup on-line. Ferramentas mais sofisticadas para execução interativa de comandos SQL, movimentação de dados, geração de relatórios e desenvolvimento de aplicações são usualmente fornecidos por projetos independentes, e na maioria dos casos estes projetos suportam vários bancos livres e proprietários resultando em maior flexibilidade e possibilidades de construção de soluções personalizadas. Em contrapartida, há o esforço adicional de integrar ferramentas de origens diferentes.

 

Ocasionalmente a mesma dificuldade pode ocorrer com recursos que são perce­bidos como sendo internos ao banco, mas que na verdade não o são – por exemplo replicação de dados e full-text search (veja o quadro “Full-text search e bancos relacio­nais”). Novamente existem vários projetos livres que fornecem essas capacidades de forma independente do banco, como o Lucene da Apache.

Assim, distribuições de alguns bancos livres podem vir “completas”, incluindo ferramentas gráficas, drivers para várias plataformas e serviços de replicação; ou­tras podem fornecer apenas o servidor de banco de dados em si e indicar softwares adicionais para complementar suas fun­cionalidades.

Veja nos links algumas ferramentas livres relacionadas com Java e bancos de dados.

 

Full-text search e bancos relacionais

  Os recursos de full-text search (buscas textuais) estão se tornando componente

Obrigatório em um banco relacional embora não se encaixem naturalmente em sua estrutura básica. Os índices tradicionais de BDs são construídos utilizando valores individuais de colunas como chaves em estruturas de árvores-B (B-tree) ou hash, enquanto que um índice para full-text search é construído utilizando fragmentos dos valores de colunas em estruturas de dados conhecidas como "trieves", que são basicamente árvores onde o valor da chave é construído concatenando todos os nós no caminho entre a raiz e a folha.Tradicionalmente, este recurso era exclusivo de sistemas voltados para o gerenciamento

 

  De documentos, como o Lotus Notes e o Folio Views, ou os softwares livres WAIS e htdig. Com a Internet, houve demanda por sua inclusão em bancos de dados, inicialmente em extensões opcionais e depois como parte dos pacotes básicos de muitos bancos.Mesmo quando fornecida no banco de dados, a capacidade de full-text search não é integrada ao modelo relacional e envolve extensões não-padronizadas à linguagem SQL. Em geral, os passos necessários

para a manutenção e a utilização dos índices necessários é bastante diferente dos comandos DDL e DML do SQL padrão, constituindo quase que uma linguagem à parte.

 

Características comuns

  A boa notícia é que todos os bancos livres citados neste artigo são maduros, estáveis e comprovados em aplicações com grande volume de dados e de usuários. Todos suportam recursos essenciais como transações, outer joins, funções agregadas, backup on-line, controle de acesso granular e criptografia, além de apresentarem compatibilidade

com as ferramentas de desenvolvimento

 

  Mais populares do mercado, tanto Java quanto nativas.(O HSQLDB é um caso à parte: por ser projetado visando sistemas embutidos ou monousuário, não suporta a totalidade desses recursos).Para o desenvolvedor Java, todos fornecem drivers JDBC tipo 4 – escritos inteiramente em Java e falando os protocolos de rede nativos dos respectivos bancos –, de modo que não há necessidade de instalar software

de cliente, ou sofrer com a perda de desempenho ocasionada pelo uso de JNI ou camadas de middleware.

 

  Por fim, todos implementam o suficiente das APIs JDBC 2.0, incluindo os pacotes opcionais de extensão (javax.sql) para permitir o seu uso com servidores

de aplicação J2EE; os drivers do MySQL e do PostgreSQL já implementam quase a totalidade do JDBC 3.0.Os três bancos analisados são capazes de gerenciar múltiplas bases de dados em uma única instância do servidor, simplificando a construção de ambientes de desenvolvimento,

testes e produção.Veja mais sobre questões de adoção de bancos livres e um comparativo resumido nos quadros “Adotar ou não um banco livre?” e “BDs livres em resumo”.

 

Listagem 1. Script para criação dos dados de teste

Create table livro (

    Codigo integer primary key,

    Nome char(80) not null,

    Autor char(400)

);

Insert into livro values

  (1, ‘thinkin in java’, ‘bruce eckel’);

Insert into livro values

  (2, ‘core j2ee patters’, ‘alur, crupi, malks’);

Insert into livro values

  (3, ‘refactoring’, ‘martin fowler’);

Insert into livro values

  (4, ‘java design’, ‘peter coad’);

 

Listagem 2. Aplicação mínima de testes

Import java.sql.*

Import java.io.*;

Public class listalivros {

...

Quer ler esse conteúdo completo? Tenha acesso completo