n>
Bancos de dados livres
O software livre hoje é parte integrante 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, incorporados 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 componente crítico de qualquer estrutura de TI. Todos os sistemas de informação, e conseqüentemente a maioria das operações da empresa, dependem dele. Portanto é natural 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 desenvolvedores, 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 risco de migração dos usuários para softwares concorrentes levaram a produtos grandes e complexos, que demoram a serem dominados e podem ser muitas vezes “canhões para matar uma mosca”. É portanto parte da cultura dos bancos proprietários disponibilizar 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 gerenciador 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 percebidos 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 relacionais”). 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; outras podem fornecer apenas o servidor de banco de dados em si e indicar softwares adicionais para complementar suas funcionalidades.
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,
Listagem 2. Aplicação mínima de testes
...