Archive for the ‘bancos.de.dados’ Category

Múltiplas Fontes de Dados, uma Engine ORM

Friday, March 30th, 2007

O Tiago postou no seu blog sua percepção sobre como o Hibernate Search é um tiro no pé. Ele afirma que justo agora que o problema do mapeamento objeto-relacional está ficando irrelevante estão criando outro problema, que ele chamou de object-indexed.

Eu concordo que existe um novo problema no horizonte e que a estrutura simplificada de metadados para persistência não está pronta para este tipo de coisa, mas não acho que seja perda de tempo esta engine, na verdade acho que pode ser muito útil. Em um projeto recente utilizei a tecnologia que meu cliente adquiriu para fazer buscas em conteúdo, uma plataforma cara e famosa de busca. Apesar de eventuais problemas com APIs, a coisa se mostrou bem interessante.

Neste sistema eu utilizo o banco de dados para fazer buscas por objetos quando os quero processar e em um caso específico (o “resultado de busca”) eu preciso destes mesmos objetos vindos da engine de busca. Não importa qual a origem, os dados representam o mesmo objeto. As Camadas de Apresentação e de Negócios estão prontas para lidar com este objeto, apenas a Camada de Persistência deve saber de onde vieram.

Eu fiz todo este trabalho na mão e isso é bem trabalhoso. No final das contas criei um código relativamente reutilizável, que pode ser empacotado numa rquivo JAR e está sendo utilizado em outros projetos com necessidades parecidas.

A grande vantagem em termos objetos que podem vir de fontes estruturadas como um SGBD ou flat como uma engine de busca é que num ambiente como o meu atual onde a base de dados é o centro do universo fazer consultas ao banco é muito caro. Muitas vezes faz mais sentido pesquisar na engine de busca, que apesar de não trazer informações e relacionamentos completos possui informação para leitura facilmente encontrável.

Independência de persistência é algo que sempre existiu. Neste caso ainda é mais simples porque os dados são de somente-leitura em uma base, ela age simplesmente como um cache. O memcached, aliás, está sendo utilizado no meu projeto atual e é tratado de maneira persistente pela aplicação através de filtros no Spring.

Os dados vêm de todo lugar, uma interface única e poderosa como do Hibernate/JPA são muito úteis no cenário moderno.

O Futuro na JAOO

Tuesday, March 20th, 2007

Ótimo painel sobre o futuro da programação no JAOO. Especialmente o comentário do PragDave:

Dave: I’d like to predict that the current stacks of software by 10-15 years are going to be in a much worse legacy and more of a nightmare to maintain. You’re going to have employment forever maintaining this stuff. C++, Java code, C# code, this stuff is very complicated and very brittle with all these class libraries and frameworks. We’re digging ourselves in a really big hole and there will be a lifetime of opportunities for you people to maintain this stuff that you’re creating.

Prepare-se e pense nisso antes de comprar aquela ferramenta mágica ou criar mais um framework que faz a mesma coisa que todos os outros.

Hibernate Search

Saturday, January 6th, 2007

Eu não testei e, sinceramente, não sabia da existência até alguns minutos atrás mas o me parece cheio de possibilidades tentadoras! O post do Emmanuel explica em linhas gerais, assim que sobrar um tempo por aqui eu quero fazer uns testes…

Cada vez menos existe a necessidade de se sequer pensar na persistência utilizada (i.e. Banco de Dados Relacional) para aplicações. Relatórios e transformações pesadas de dados são uma desculpa interessante mas podem ser devidamente isoladas do núcleo transacional da sua aplicação.

Consultas no Hibernate

Saturday, November 25th, 2006

Muitas pessoas reclamam que perdem o poder do SQL ao utilizar um mapeamento objeto-relacional como o Hibernate. Daniel Passos mostra que existem modos de “recuperar” este “poder”, caso necessário, claro.

Bases de Dados São Recursos?

Thursday, August 24th, 2006

Quase todo sistema acaba persistindo dados de alguma forma, geralmente em grandes repositórios conhecidos como bancos de dados. Recentemente, os Sistemas gerenciadores de Bancos de Dados vêm perdendo sua posição como centro do universo para aplicações coorporativas e vem a pergunta: qual o papel do banco de dados num sistema coorporativo moderno? O banco de dados faz parte do seu sistema ou é apenas um recurso acessado por ele, como um filesystem ou servidor de e-mails?

Bancos de dados coorporativos foram o grande xodó das empresas (ainda são em boa parte delas). O raciocínio é simples: o objetivo do sistema é manipular e armazenar dados. Se eu preciso que vários sistemas (processadores de dados) acessem o mesmo dado, é bom que eles estejam em um lugar comum, daí o SGBD.

Banco Corporativo

O SGBD é o repositório de dados supremo, formando o Banco de Dados Coorporativo. Este, que fisicamente pode estar espalhado em diversos SGBDs de fabricantes diversos, é acessado por todos os sistemas. Na verdade, ao especificar um sistema neste ambiente a coisa mais problemática costuma ser sentar-se com a equipe de DBAs responsável para que esta avalie suas necessidades, geralmente criando views que permitem ao seu sistema acessar os dados.

O problema neste caso é que na evolução da tecnologia, não são apenas os dados que são comuns a diversos sistemas, mas também a lógica, o processamento. Não é admissível num sistema moderno a existência de lógica duplicada, um sistema deve reutilizar os componentes (ou serviços) providos por outros.

Ok, mas e os dados? Bem, os componentes de software (sejam business components vindos de CBD ou serviços SOA ou qualquer outra coisa neste sentido) possuem como grande característica o seu encapsulamento. A lógica interna ao componente, suas estruturas de dados e demais aspectos não devem vazar para fora deste. Isto inclui os dados.

Os dados pertencentes a um componente não devem vagar para fora dele. De uma maneira geral, um componente recebe e retorna apenas objetos por valor, ou seja: cópias dos objetos que mantêm dentro dele, que podem ser modificados pelo cliente e não vão interferir os objetos reais. Com a tecnologia atual e dependendo da granularidade do componente isto nem sempre é viável ou desejável, mas é a teoria (para este tipo de decisão que você precisa de um arquiteto experiente).

Componentes

Então, se nossos componentes têm por princípio básico proteger a implementação de algum conceito, devemos permitir acesso direto á base de dados? Não, pelo menos não enquanto pudermos evitar. O acesso aos dados deve ser feito unicamente pela API do componente, nunca quebrando o encapsulamento deste para injetar dados diretamente no banco. Veja o diagrama acima, bases de dados sequer são mencionadas!

Independente de o seu sistema ser construído com componentes, serviços ou apenas uma grande massa monolítica de código (como são a maioria dos sistemas), é importante definir o que é banco de dados corporativo do que é o repositório que guarda os dados da sua aplicação/componente/serviço.

Se sua aplicação (/componente/serviço) não guarda dados encapsulados, ou seja: se sua empresa insiste que você use um banco de dados coorporativo, trate o SGBD como um outro sistema com o qual você se comunica. Se seu sistema não pode garantir que os dados neste depósito não serão alterados por outros sistemas então o que você tem é uma integração, não um lugar para guardar seus objetos. Neste caso, utilize as técnicas clássicas de Mappers e Anticorruption-Layers.

Se você precisa acessar dados em um SGBD corporativo, utilize também estas técnicas. Não é porque seu sistema se comunica com este outro componente (o banco corporativo) via JDBC que ele é sua persistência. Utilizar um framework de ORM como Hibernate ou EJB 3.0 (JPA) é algo que eu não recomendaria porque o framework vai considerar que o banco de dados é sua persistência, não um outro sistema a ser integrado. EJB 3.0 por exemplo traz o mapeamento entre classes e tabelas para dentro dos seus arquivos-fonte, isto só é desejável se esta informação representa metadados do seu aplicativo, não configuração. Uma abordagem mais sadia mantendo a produtividade de um framework (afinal, ninguém gosta de escrever JDBC…) pode ser obtida utilizando frameworks ORM com propostas diferentes, como o iBatis.

Nestes dois casos, o SGBD é um recurso, não uma parte da aplicação. É como o servidor de e-mail: pode ser crucial para seu sistema funcionar mas não faz parte dele. Mais que esconder a implementação da persistência, a Camada do seu sistema que tem contato com o SGBD deve se preocupar em checar entradas e saídas, pré e pós condições, exatamente como quando fazemos chamadas a outros sistemas ou componentes.

Integracao

Já no caso oposto, com seu sistema encapsulando completamente o banco de dados, temos o SGBD como o local onde nossos objetos são armazenados. Neste caso o banco de dados faz parte da aplicação e devemos utilizar a Camada de Persistência para acessá-lo. Esta Camada tem por dever esconder da Camada de Negócios detalhes sobre como a persistência é implementada, na verdade ela esconde simplesmente que existe algo chamado Persistência, visto que para a Camada de Negócios persistência é algo transparente.

Integrado

Apesar de o banco de dados ser fisicamente uma entidade separada do programa (seu binário, WAR, EAR ou o que for), conceitualmente ele faz parte da aplicação. Note que isto não quer dizer que existe um esquema de dados físico (table schema, database ou coisa parecida) para cada componente. O esquema de dados pode residir em qualquer SGBD, mesmo um compartilhado. O que importa é que quem lê e edita aqueles dados é apenas sua aplicação.

Enquanto componentes ou serviços não fazem parte da arquitetura corporativa das empresas vamos conviver com bancos de dados corporativos, é bom que nossos sistemas se preparem para conviver pacificamente com eles.

Grid+WebServices: Falar e Fazer

Monday, March 20th, 2006

Parece que após tantos e tantos anos de falatório em torno da computação distribuída o início de 2006 traz resultados práticos. A Amazon (é, a dos livros!) anunciou um serviço de armazenamento online e a Sun acaba de anunciar, pela voz do seu presidente, que estará inaugurando uma grid de computadores pública disponível sob demanda.

O Network.com ou Sun Grid ainda vai ser lançado mas pelo que deu para entender você faz o upload de uma aplicação e conecta-se a ela através de WebServices (SOAP, creio). O sistema aceita binários para Solaris x86 ou Java. Mais um dos motivos da Sun para liberar seu Solaris e para se decidir como empresa de hardware, mas hardware como serviço, não como produto.

Em breve creio que vamos ver a IBM e HP lançando serviços parecidos, além de versões baseadas em .Net, Linux, Windows e demais.

A maioria das aplicações que fazemos no dia-a-dia ainda não são o alvo deste tipo de arquitetura. A Sun visa atingir os grandes consumidores de CPU como softwares de simulação, renderização, cálculos e bioinformática. Estas áreas possuem projetos interessantes que ou constroem seu próprio grid e estouram seu orçamento ou não obtêm resultados esperados.

Ainda assim, boa parte das aplicações que eu construí acabaram indo para servidores dedicados em datacenters terceirizados. Se ao invés de alugamors ‘um servidor Pentium IV com Linux’ alugarmos ‘X horas de CPU/mês’, temos um cenário onde grids públicos são bem aplicáveis e, teoricamente, baratos.

Será que em breve fazer deployment de uma aplicação será fazer o upload pro network.com (ou concorrente) dos binários e criar o banco de dados no S3 da Amazon (ou concorrente)?

E a pergunta mais importante neste instante: será que isso salva a Sun?

Novo Livro de Scott Ambler e Notícia Agradável

Saturday, March 11th, 2006

Dia 3 deste mês saiu o novo livro de Scott Ambler, Refactoring Databases : Evolutionary Database Design.

Para quem não conhece, Scott Ambler é criado do Agile Modeling, Agile Data Method, Agile Model Driven Development (AMDD), Enterprise Unified Process (EUP), e da metodologia Full Lifecycle Object-Oriented Testing (FLOOT), além de ser contribuidor do RUP. É autor de diversos (mesmo!) livros e artigossobre Java, UML, metodologias e Modelagem de sistemas.

Enquanto a Amazon não entrega o meu exemplar, eu convido a dar uma olahda na apresentação do Ambler para o JavaPolis.

E se você realmente gostar do trabalho do Ambler e quiser ouvir diretamente da boca dele sobre as novas tendências e tecnologias, tenho o prazer de lhe informar que Scott Ambler e mais personalidades do mundo Java e OO vão estar presentes no Rio de Janeiro em um evento que promete entrar para a história. Não perca mais detalhes neste blog ;)