db4o

26
Db4o Origem: Wikipédia, a enciclopédia livre. Ir para: navegação , pesquisa db4o (database for objects) é um Banco de Dados Orientado a Objetos . É open source e possui interface para desenvolvimento de aplicações utilizando a Plataforma Java da SUN , a Plataforma .NET da Microsoft e Projeto MONO . Índice [esconder ] 1 db4objects (db4o) - Banco de Dados para Objetos 2 Codificação db4o - Exemplo em Java 3 Ver também 4 Referências [editar ] db4objects (db4o) - Banco de Dados para Objetos O Banco de Dados Orientado a Objetos db4objects (db4o) foi projetado para aplicações do tipo embarcada, cliente- servidor e desktop. Possui modo nativo para Java e .Net . Usa uma única biblioteca de desenvolvimento que se integra facilmente às aplicações e executa de forma altamente confiável e escalável tarefas de persistência com somente algumas linhas de código, não importando o quanto são complexas as estruturas. [1] Não necessita utilizar-se de consultas SQL para CRUD (Create, Read, Update e Delete), eliminando a troca de orientado a objetos por performance. [2] Empresas como a Boing, Bosch, Hertz, BMW, Intel, Seagate entre outras [3] já utilizam o db4o. Apresenta vantagens em relação ao Banco de Dados Relacional: oferece rapidez de inserção, utiliza pouco recurso computacional, tem fácil aprendizado, acesso direto ao Banco de Dados sem utilizar ORM (Mapeamento Objeto-Relacional) e ambiente de administração zero, já que as rotinas de melhoria podem ser

Upload: deividi-goncalves

Post on 24-Jun-2015

675 views

Category:

Documents


19 download

TRANSCRIPT

Page 1: Db4o

Db4oOrigem: Wikipédia, a enciclopédia livre.Ir para: navegação, pesquisa

db4o (database for objects) é um Banco de Dados Orientado a Objetos. É open source e possui interface para desenvolvimento de aplicações utilizando a Plataforma Java da SUN , a Plataforma .NET da Microsoft e Projeto MONO.

Índice

[esconder]

1 db4objects (db4o) - Banco de Dados para Objetos 2 Codificação db4o - Exemplo em Java 3 Ver também 4 Referências

[editar] db4objects (db4o) - Banco de Dados para Objetos

O Banco de Dados Orientado a Objetos db4objects (db4o) foi projetado para aplicações do tipo embarcada, cliente-servidor e desktop. Possui modo nativo para Java e .Net. Usa uma única biblioteca de desenvolvimento que se integra facilmente às aplicações e executa de forma altamente confiável e escalável tarefas de persistência com somente algumas linhas de código, não importando o quanto são complexas as estruturas.[1] Não necessita utilizar-se de consultas SQL para CRUD (Create, Read, Update e Delete), eliminando a troca de orientado a objetos por performance.[2] Empresas como a Boing, Bosch, Hertz, BMW, Intel, Seagate entre outras [3] já utilizam o db4o. Apresenta vantagens em relação ao Banco de Dados Relacional: oferece rapidez de inserção, utiliza pouco recurso computacional, tem fácil aprendizado, acesso direto ao Banco de Dados sem utilizar ORM (Mapeamento Objeto-Relacional) e ambiente de administração zero, já que as rotinas de melhoria podem ser feitas por um programador.[4] Na Espanha, a Indra Sistemas, uma empresa de desenvolvimento de softwares, foi contratada para criar o centro de controle do sistema espanhol de trens bala AVE. Neste projeto, o db4o foi utilizado como a base de dados de tempo real para controlar o tráfego. A capacidade de processamento do sistema da Indra fica em torno de 200 mil objetos por segundo.[5] A Figura abaixo mostra que o objeto é desmontado para o armazenamento em estruturas de tabelas no Banco de Dados Relacional. Já no db4o, o objeto é diretamente armazenado como objeto.

Page 2: Db4o

Armazenamento de objetos em um B.D. Relacional e em um B.D. db4o

De acordo com a empresa que produz o db4o, este banco roda até 44 vezes mais rápido que os Bancos de Dados conhecidos como Hibernate com MySql. O benchmark de licença GPL, PolePosition, tem um método de teste chamado Barcelona que faz escrita, leitura, consultas e remoção de objetos com uma estrutura de herança de 5 níveis.[6] Segundo o teste, o db4o se saiu melhor em relação a vários Bancos de Dados conforme detalhes da Tabela Abaixo.

Detalhes do benchmark open source PolePosition gerado para comparar o db4o.[7]

Os recursos de consultas são fundamentais para qualquer Banco de Dados e o db4o oferece vários métodos de recuperação de dados:[8]

QBE (Query by Example): No método QBE, você cria um modelo de objeto, que é uma instância da classe que você deseja pesquisar. Se atribuir valores para um ou mais atributos no seu modelo, então db4o procura por objetos no Banco de Dados com os atributos correspondentes. É um método simples e de fácil aprendizagem, mas só é ideal para consultas que não precisam de operadores lógicos. SODA (Simple Object Data Access): Constrói um grafo de consulta navegando referências em classes e as restrições que impõe. Utiliza strings para identificar os campos. Rápido, mas o conceito pode ser

Page 3: Db4o

difícil de acostumar. NQ (Native Query): É uma consulta nativa expressa inteiramente na linguagem de programação e com checagem de tipos durante a compilação. Oferece consultas com várias vantagens importantes.

[editar] Codificação db4o - Exemplo em Java

Abaixo segue um códigos simples de exemplo para inserção, atualização, consulta e remoção, escrito na linguagem Java:

Declaração da classe Pessoas em Javapackage exemploobjetos;/*** * @author David Rodrigues Machado**/public class Pessoas { private int cod; private String nome; public void setCod(int cod) { this.cod = cod; } public void setNome(String nome) { this.nome = nome; } public int getCod() { return (cod); } public String getNome() { return (nome); }}

Código em Java utilizando o Banco de Dados Orientado a Objetos db4opackage exemploobjetos;import com.db4o.*;/*** * @author David Rodrigues Machado**/public class Main { public static void main(String[] args) { //Variável do arquivo do Banco de Dados ObjectContainer db = Db4o.openFile("Banco.yap"); //Criando um objeto do tipo Pessoas Pessoas p = new Pessoas(); //Objeto do tipo Pessoas para obter o objeto que se deseja do banco Pessoas achou_p; //Variável para obter o resultado do objeto recuperado ObjectSet result; //INSERÇÃO p.setCod(20);//Instanciando o objeto com o código 20 p.setNome("David");//Instanciando o objeto com o nome David db.set(p);//Armazenando o objeto no banco System.out.println("O objeto foi inserido"); //ATUALIZAÇÃO p.setCod(20);//Instanciando o objeto com o código 20 result = db.get(p);//Recupera o objeto p do Banco

Page 4: Db4o

achou_p = (Pessoas) result.next();//retorna o objeto se existir achou_p.setCod(20);//Instanciando o objeto encontrado com código 20 achou_p.setNome("Jaqueline");//Alterando o objeto para o nome Jaqueline db.set(achou_p);//Armazenando o objeto no Banco System.out.println("O objeto foi atualizado"); //CONSULTA p.setCod(20); result = db.get(p); achou_p = (Pessoas) result.next(); System.out.println("O objeto foi consultado"); //Imprime o resultado da consulta System.out.println("O resultado da consultado é:"); System.out.println("Código: " + achou_p.getCod()); System.out.println("Nome: " + achou_p.getNome()); //REMOÇÃO p.setCod(20); result = db.get(p); achou_p = (Pessoas) result.next(); db.delete(achou_p);//Apaga o objeto System.out.println("O Objeto foi apagado"); db.close();//Fechando o Banco }}

Saída do Programa

O objeto foi inserido

O objeto foi atualizado

O objeto foi consultado

O resultado da consultado é:

Código: 20

Nome: Jaqueline

O objeto foi apagado

[editar] Ver também

Banco de dados orientado a objetos Orientação a objeto Mapeamento objeto relacional Persistência ESKELSEN, Cassio Rogerio. db4o: Banco de Dados Orientado a Objetos. Dez.

2005. Disponível via URL em: http://www.bizness.com.br/weblog/post/2008/08/05/db4o-Banco-de-Dados-Orientado-a-Objetos.aspx. Acesso em: 21 nov. 2009.

Referências

Page 5: Db4o

1. ↑ MACHADO, David Rodrigues. Comparação entre Banco de Dados Relacionais e Banco de Dados Orientado a Objetos: Características e Implementação de um Protótipo. 2009. 41p. Monografia (Bacharelado em Engenharia de Computação) – Curso de Engenharia de Computação da Universidade São Francisco, Campus de Itatiba. http://www.saofrancisco.edu.br/cursos/graduacao/producao_download.asp?arquivo=1716

2. ↑ db4o: Banco de objetos de código aberto. [ca. 2009]. Disponível via URL em: http://www.db4o.com/portugues/db4o%20Product%20Information%20V5.0(Portuguese).pdf. Acesso em: 17 jun. 2009.

3. ↑ Customers and Partners. [ca. 2009]. Disponível via URL em: http://www.db4o.com/about/customers/. Acesso em: 20 nov. 2009.

4. ↑ GUERRA, Glaucio. DB4Objects na terra de gigantes do BD relacional com Java: Parte I. Out. 2007. Disponível via URL em: http://www.devmedia.com.br/articles/viewcomp.asp?comp=4121. Acesso em: 14 jun. 2009.

5. ↑ ROSENBERG, Dave. INDRA: Sistema de Missão Crítica para controle de trens de alta velocidade. [ca. 2009]. Disponível via URL em: http://www.db4o.com/portugues/db4o%20Success%20Story%20%20INDRA%20Sistemas(Portuguese).pdf. Acesso em: 17 jun. 2009.

6. ↑ PolePosition. [ca. 2009]. Disponível via URL em: http://www.polepos.org/. Acesso em: 20 nov. 2009.

7. ↑ Benchmarks: Performance advantages to store complex object structures. [ca. 2009] Disponível via URL em: http://www.db4o.com/about/productinformation/benchmarks/. Acesso em: 21 nov. 2009.

8. ↑ PATERSON, Jim; EDLICH, Stefan; HÖRNING, Henrik; HÖRNING, Reidar. The Definitive Guide to db4o. New York: Apress, 2006. ISBN 1-59059-656-0

Page 6: Db4o

db4o Muita gente me faz a pergunta: “Que solução utilizar para persistência de dados?” Eu inclusive já abordei esse assunto aqui no Blog quando falei do futuro do LINQ to SQL:

http://www.algoritma.com.br/rodrigo.sendin/2008/11/e-o-linq-to-sql.html.

Minha resposta na maioria das vezes é: Depende do Projeto.

Se você tem um projeto de pequeno ou médio porte ou de prazo apertado, eu sugiro as soluções que vão simplificar o trabalho e aumentar a produtividade. Particularmente eu uso os DataSets Tipados do ADO.NET que atendem bem a estes cenários.

Agora, se você tem prazo sobrando e vai desenvolver um projeto relativamente grande, vale a pena investir tempo em frameworks de mapeamento objeto/relacional, como nHibernate e ADO.NET Entity Framework. Vale também planejar sua aplicação em camadas, utilizando algum padrão de projeto que vise à reutilização de código. Certamente você terá ganhos a longo prazo.

Mas no geral eu sempre tive um pé atrás com soluções de mapeamento objeto/relacional, ou padrões que criam complexos mecanismos de gravação/recuperação de dados. Além de tornarem tudo mais trabalhoso, o mercado está inundado de soluções que visam resolver o problema de incompatibilidade entre a orientação a objetos e os bancos de dados relacionais. O que dá a entender que não existe “A solução definitiva”. O que temos são variadas formas de se driblar este problema, cada uma delas com seus benefícios e defeitos.

Recentemente eu tenho dado atenção a outro tipo de solução para este problema: Os Bancos de Dados Orientado a Objetos. Não vou entrar nos detalhes de siglas e definições deste tema, basta saber que há muita gente desenvolvendo databases ou frameworks que armazenam os dados na forma de Objetos, e não em estruturas relacionais.

Um deles que dou destaque neste post, é o db4o (sigla de db4objects) http://developer.db4o.com/. Este database orientado a objetos foi criado inicialmente para Java, mas hoje tem uma ótima versão para .NET. No link citado você encontra o download da última versão, logo na primeira página.

De forma bem resumida posso dizer que as principais características do db4o são:

• É simples de usar, basta usar uma única DLL para as operações básicas; • Comporta soluções locais e também Client/Server;

• É Open Source, e GPL pra quem é GPL;

• Compatível com varias formas de Query, como QBE e o LINQ do .NET;

• Possuí ferramentas de gerenciamento e configuração para ambientes de servidor;

• Comporta ambientes de replicação;

Page 7: Db4o

• Possuí uma versão para o .NET Compact Framework e para o Projeto Mono;

• Tem uma comunidade de desenvolvedores e usuários muito ativa;

Hoje se alguém me faz a pergunta lá de cima, eu sugiro considerar essa opção também, principalmente se o uso de um Banco de Dados Relacional não é pré-requisito do projeto.

Com certeza é difícil vender essa idéia, afinal os bancos de dados relacionais tem dominado o mercado ja a algum tempo. Mas de modo prático pro cliente final não muda nada. O que certamente vai melhorar com o uso de uma ferramenta como o db4o, é a sua produtividade, e esse benefício pode ser repassado para o cliente final em forma de redução de custos.

Mas vale a pena ficar por dentro de como um banco de dados orientado a objetos funciona, e quais são os benefícios e problemas frente aos relacionais. É por isso que eu vou começar a abordar este assunto aqui em futuros posts, de forma mais detalhada e com demonstrações técnicas. Se você tiver interesse em conhecer mais, também começarei a publicar alguns artigos nas edições impressas da .NET Magazine sobre esse tema. E também vídeo-aulas no Portal da DevMedia (www.devmedia.com.br). Aguarde e confira!

db4o – Baixando e instalando (parte 1) Caso ainda não tenha lido, sugiro que leia o post anterior para que saiba sobre o que vamos ver na seqüência de posts que começo hoje.

Começaremos com o download e instalação do db4o nesta parte 1. Nas partes seguintes iremos ver desde recursos básicos até avançados, deste banco de dados orientado a objetos.

A primeira coisa que você deve fazer para iniciar o uso do db4o é o seu download no site da comunidade de desenvolvedores: http://developer.db4o.com/. Como você pode ver na figura abaixo, o download pode ser feito logo na primeira página, no canto direito.

Page 8: Db4o

Note que existem duas versões para a plataforma .NET. Uma para .NET 2.0 e a outra para o .NET 3.5. Vamos fazer o download e instalação da versão 7.4 do db4o para .NET 3.5.

O download é simples e rápido, e ao seu final basta executar o pacote db4o-7.4-net35.msi, para iniciar a instalação do db4o em seu computador.

A instalação também é extremamente simples, pode aplicar a técnica NNF que não tem erro. (NNF = Next - Next – Finish). Só peço a sua atenção para a segunda tela do Wizard de instalação, que você vê na figura a seguir:

Aqui você pode ver o diretório onde o db4o vai ser instalado, e também pode modificar esse caminho se quiser. A importância de saber onde o db4o vai ser instalado, é que para utilizá-lo em nossos projetos .NET, precisaremos apontar para as DLLs que estarão aqui.

Page 9: Db4o

Com isso você pode notar que a instalação do db4o é praticamente uma simples descompactação. Nada é registrado em GAC ou nos registros do Windows. Essa é uma característica que eu particularmente gosto, pois torna o uso e principalmente a distribuição muito mais fácil e portável.

Terminada a instalação, abra o Windows Explorer e vá até o diretório onde o db4o foi instalado na sua máquina. Veja na parte esquerda da figura abaixo, a estrutura de diretórios criada:

Note que temos três pastas principais aqui:

~\Db4objects\dv4o-7.4\src\ é onde você vai encontrar todo o código fonte do db40. Sim, você já tem acesso ao código fonte da ferramenta.

~\Db4objects\dv4o-7.4\doc\ uma vasta documentação para que você possa dar os primeiros passos com o db4o. A maioria dos exemplos que você verá neste blog será adaptada dessa documentação.

~\Db4objects\dv4o-7.4\bin\ é onde encontramos os binários para o .net 3.5 e compact framework. Note na figura acima, que a DLL Db4objects.Db40.dll está em destaque. Esta será a DLL que mais iremos utilizar para por em prática os exemplos do db4o.

Outra observação importante é que ao término da instalação, você teve a opção de iniciar o tutorial que vem junto com o db40. Esse tutorial também pode ser acessado pelo menu iniciar, na pasta db4objects.

O tutorial é bem interessante e nele encontramos as principais funcionalidades do db4o. Ele usa um exemplo bastante simples e didático de Pilotos e Carros de Fórmula 1. Os exemplos que veremos nos próximos posts serão baseados neste tutorial. Espero você aqui no próximo post.

Grande Abraço!

Page 10: Db4o

Marcadores: db4o

postado por Rodrigo Sendin @ 09:13   0 Comentários Links para esta postagem

terça-feira, 27 de janeiro de 2009

db4o Muita gente me faz a pergunta: “Que solução utilizar para persistência de dados?” Eu inclusive já abordei esse assunto aqui no Blog quando falei do futuro do LINQ to SQL:

http://www.algoritma.com.br/rodrigo.sendin/2008/11/e-o-linq-to-sql.html.

Minha resposta na maioria das vezes é: Depende do Projeto.

Se você tem um projeto de pequeno ou médio porte ou de prazo apertado, eu sugiro as soluções que vão simplificar o trabalho e aumentar a produtividade. Particularmente eu uso os DataSets Tipados do ADO.NET que atendem bem a estes cenários.

Agora, se você tem prazo sobrando e vai desenvolver um projeto relativamente grande, vale a pena investir tempo em frameworks de mapeamento objeto/relacional, como nHibernate e ADO.NET Entity Framework. Vale também planejar sua aplicação em camadas, utilizando algum padrão de projeto que vise à reutilização de código. Certamente você terá ganhos a longo prazo.

Mas no geral eu sempre tive um pé atrás com soluções de mapeamento objeto/relacional, ou padrões que criam complexos mecanismos de gravação/recuperação de dados. Além de tornarem tudo mais trabalhoso, o mercado está inundado de soluções que visam resolver o problema de incompatibilidade entre a orientação a objetos e os bancos de dados relacionais. O que dá a entender que não existe “A solução definitiva”. O que temos são variadas formas de se driblar este problema, cada uma delas com seus benefícios e defeitos.

Recentemente eu tenho dado atenção a outro tipo de solução para este problema: Os Bancos de Dados Orientado a Objetos. Não vou entrar nos detalhes de siglas e definições deste tema, basta saber que há muita gente desenvolvendo databases ou frameworks que armazenam os dados na forma de Objetos, e não em estruturas relacionais.

Um deles que dou destaque neste post, é o db4o (sigla de db4objects) http://developer.db4o.com/. Este database orientado a objetos foi criado inicialmente para Java, mas hoje tem uma ótima versão para .NET. No link citado você encontra o download da última versão, logo na primeira página.

De forma bem resumida posso dizer que as principais características do db4o são:

• É simples de usar, basta usar uma única DLL para as operações básicas; • Comporta soluções locais e também Client/Server;

Page 11: Db4o

• É Open Source, e GPL pra quem é GPL;

• Compatível com varias formas de Query, como QBE e o LINQ do .NET;

• Possuí ferramentas de gerenciamento e configuração para ambientes de servidor;

• Comporta ambientes de replicação;

• Possuí uma versão para o .NET Compact Framework e para o Projeto Mono;

• Tem uma comunidade de desenvolvedores e usuários muito ativa;

Hoje se alguém me faz a pergunta lá de cima, eu sugiro considerar essa opção também, principalmente se o uso de um Banco de Dados Relacional não é pré-requisito do projeto.

Com certeza é difícil vender essa idéia, afinal os bancos de dados relacionais tem dominado o mercado ja a algum tempo. Mas de modo prático pro cliente final não muda nada. O que certamente vai melhorar com o uso de uma ferramenta como o db4o, é a sua produtividade, e esse benefício pode ser repassado para o cliente final em forma de redução de custos.

Mas vale a pena ficar por dentro de como um banco de dados orientado a objetos funciona, e quais são os benefícios e problemas frente aos relacionais. É por isso que eu vou começar a abordar este assunto aqui em futuros posts, de forma mais detalhada e com demonstrações técnicas. Se você tiver interesse em conhecer mais, também começarei a publicar alguns artigos nas edições impressas da .NET Magazine sobre esse tema. E também vídeo-aulas no Portal da DevMedia (www.devmedia.com.br). Aguarde e confira!

db4o – CRUD (parte 2) Vamos agora ver como criar o nosso primeiro banco de dados no db40, e como realizar as quatro operações básicas de qualquer banco de dados: Inclusão, Alteração, Exclusão e Consulta (CRUD = Create, Read, Update e Delete).

A primeira coisa que fazemos quando vamos criar um banco de dados é definir a sua estrutura. Porém aqui estamos falando de um banco de dados orientado a objetos, e não um database relacional como o SQL Server ou Oracle.

A primeira coisa que você tem que saber sobre os databases OO é que a estrutura de dados é definida através de Classes e não de Tabelas. Na prática, o que temos que fazer é criar nossas classes em C#, no próprio Visual Studio.

Vou começar com um exemplo muito simples, porém preparado para comportar os exemplos mais avançados que veremos nos posts futuros. Sendo assim, criei no

Page 12: Db4o

Visual Studio uma Solution chamada Algoritma, e dentro dessa solution adicionei um projeto do tipo Class Library, chamado Algoritma.Model. Será aqui que iremos criar as classes que definirão a estrutura de dados do nosso database.

Você pode criar suas classes usando o diagrama de classes do Visual Studio. Com ele o processo de modelagem fica bem mais simples e prático. Veja na imagem abaixo que eu criei uma classe chamada Country.

Através do Diagrama do Visual Studio nós podemos criar a nossa estrutura de classes, porém não vamos fugir de por a mão no código, para fazer alguns ajustes nestas classes. Sendo assim, edite a classe Country.cs para que fique como mostra o código abaixo:

Page 13: Db4o

Note que criamos três propriedades simples, que irão armazenar o ID do país, que será uma simples sigla, o Nome e um inteiro que irá representar a população daquele país. Em seguida temos um construtor simples que apenas inicializa as propriedades do objeto que está sendo instanciado.

Mais abaixo temos outros dois métodos. O AddPopulation() que simplesmente adiciona valores à População. Não tem um objetivo muito prático, mas vai nos ajudar a entender que apesar de estarmos falando de armazenamento, podemos definir métodos nas nossas classes.

E por fim o método ToString(), que foi sobrecarregado da classe Objects, e aqui irá retornar uma string que exibe todas as propriedades do país.

A princípio essa será a única classe que iremos criar. Veremos agora como criar um banco de dados no db4o e armazenar instancias da classe Country nele.

Antes disso você deve ter observado que até agora não utilizamos nenhum recurso do db4o. Esse é um diferencial importante, pois podemos definir nossas classes da maneira que quisermos, e o db4o se encarregará de armazenar os objetos no database.

Para criarmos nosso banco de dados no db40, vamos adicionar um novo projeto na Solution, agora do tipo Console Application. Neste exemplo eu criei um projeto chamado Algoritma.ConsoleApp.

De cara, neste projeto devemos adicionar duas referencias. Uma referencia ao projeto Algoritma.Model, para que possamos ter acesso à nossa classe Country. E uma referencia à DLL Db4objects.Db4o.dll, que como foi dito no post anterior, é a DLL principal do db4o. Essa DLL você provavelmente irá encontrar no seguinte caminho: C:\Program Files\Db4objects\db4o-7.4\bin\net-3.5.

Com as duas referências criadas, vamos agora ao processo de criação e abertura do banco de dados, que nada mais é do que uma simples linha de código na classe Program.cs, veja a seguir:

Page 14: Db4o

Como você pode notar estamos criando uma instancia da interface IObjectContainer, através do método estático OpenFile() da classe Db4oFactory. Veja que este método aponta para um arquivo com extensão .yap. Esta é a extensão dos databases do db4o, que neste caso foi nomeado como Algoritma.yap. Caso o arquivo não exista, ele será criado e aberto, caso exista será apenas aberto.

Em seguida temos uma estrutura try/finally que irá garantir que o database seja devidamente fechado assim que terminarmos de utilizá-lo.

Muito bem, com isso já podemos fazer nossos primeiros testes CRUD. Comecemos com um método de inclusão. Basta incluir o método do código abaixo e fazer a sua chamada no método Main, conforme você vê na própria listagem a seguir:

Page 15: Db4o

O Método InsetCountries está criando 3 instancias da classe Country, e armazenando-as no database através do método Store() que temos no IObjectContainer. Note que ao final estamos chamando o método Commit(). Este método está implicitamente concluindo a transação. A partir do momento em que abrimos o database, já estamos em uma transação. E após a chamada do método Commit() a transação atual foi concluída, e outra iniciada.

Execute sua aplicação e veja que os países são inclusos e exibidos na Console. Confira na Figura abaixo.

De tão simples parece estranho não é? Parece que não aconteceu nada, que estes objetos estão apenas na memória, e que ao finalizar a aplicação eles vão ser perdidos. Mas não, eles foram gravados em disco, lá no arquivo Algoritma.yap, e portanto estão armazenados no database db4o.

Vamos à prova. Voltando ao código da classe Program.cs, inclua agora o método SelectCountries conforme mostra o código abaixo, e no método Main(), substitua a chamada do método InsertCountries(), pelo SelectCountries().

Page 16: Db4o

Note que estamos fazendo uma consulta que irá retornar um IList contendo dos os objetos da classe Country que existirem no database. Essa é uma das diversas formas que existem para a realização de queries no db40. Veremos no decorrer dos exemplos outras formas.

Execute a aplicação e veja como mostra a imagem abaixo, que é exibido o total de países cadastrados, juntamente com os dados detalhados de cada país.

Abaixo temos o método UpdateCountry, que como você pode ver está realizando um outro tipo de pesquisa, utilizando o padrão QBE. QBE quer dizer Query By Example, ou “Consulta por Exemplo”. Isso significa que o db4o deverá nos retornar todos os objetos armazenados que forem iguais ao do exemplo passado no parâmetro.

A condição é realizada ignorando as propriedades definidas como null, ou zero no caso do inteiro. Com isso estamos recuperando apenas um objeto, no caso o com o ID igual a “FR”.

Com o objeto recuperado do database, podemos fazer a alteração que desejarmos e salvarmos essa alteração através do mesmo método Store(). Veja o resultado da execução deste código na figura a seguir:

Para finalizar segue o código do método DeleteCountry, que também usa QBE para recuperar o país US do database, e excluí-lo do banco.

Page 17: Db4o

O resultado da execução deste método você confere na figura abaixo:

Este foi apenas um exemplo básico de como criar um database db4o e realizar as operações mais simples com ele.

Mas aqui nós já podemos ver que o processo de gravação e recuperação dos dados é muito simples, bem mais simples do que estamos acostumados em ambientes de mapeamento objeto / relacional. Veremos muito mais facilidades nos próximos exemplos.

Nos próximos POSTs iremos ver quais são as principais formas de realizar Queries com o db40. Grande Abraço e até lá!

db4o (parte 3) – QBE: Query-By-Example O db4o oferece quatro formas diferentes de se realizar queries: Query By Example (QBE), Native Queries (NQ), SODA API e LINQ. Neste POST veremos como funciona o QBE.

Query-By-Example, ou simplesmente QBE é a forma mais simples e indicada para usuários que estão iniciando com o db4o. Este é um conceito de construção de queries antigo, que foi criado em paralelo com a linguagem SQL nos anos 70.

A idéia é criar um protótipo que servirá de exemplo para os registros que devem ser retornados pela pesquisa. Este tipo de query é muito comum na orientação a objetos. Se quiser conhecer mais sobre o conceito, dê uma olhada neste artigo publicado no Wikipédia: http://en.wikipedia.org/wiki/Query_by_Example

No db4o quando você usa o QBE, deve fornecer como parâmetro um objeto de template. O db4o irá retornar todos os objetos que tiverem as propriedades iguais aos do objeto template, ignorando apenas as propriedades que contiverem valores defaults.

Page 18: Db4o

Fazendo uma consulta na base de dados criada no POST anterior, veja o exemplo abaixo:

Neste exemplo estamos executando uma Query By Example, passando “como exemplo” um objeto da classe Country que possuí a propriedade ID = “BR”. O valor null para strings e o zero para inteiros, são considerados valores defaults, e portanto essas propriedades não entram como condição para esta pesquisa. Sendo assim, o resultado dessa query irá retornar apenas o país Brasil, veja na imagem abaixo:

Obviamente esse tipo de Query é bastante limitado, já que restringe as nossas possibilidades de pesquisa a retornar apenas objetos que tenham as propriedades iguais às do objeto template. Além disso, você não pode utilizar operadores lógicos como OR, AND ou NOT. Porém, é uma forma muito útil e fácil de pesquisar um determinado objeto, através de propriedades chaves, como um ID.

O QBE também pode ser utilizado como uma forma simples e rápida de retornar todos os objetos de uma determinada classe, veja o exemplo do código abaixo:

O resultado é a lista de todos os países armazenados no database. Veja na figura a seguir:

Page 19: Db4o

Como disse no início, essa é uma forma bem simples para realizar consultas no db4o, e indicada quando estamos iniciando. No próximo POST veremos como funcionam as Native Queries (NQ), para principalmente endereçar tipos de pesquisa não suportados pelo QBE.

Grande Abraço e até o próximo!

db4o (parte 5) – Queries SODA SODA é a API interna do db4o para a execução de Queries. Ela oferece compatibilidade com antigas versões, e pode ser utilizada para a criação de queries dinâmicas, enquanto a NQ é fortemente tipada.

A API SODA pode ser utilizada para queries dinâmicas, pois identifica os campos das classes como strings. Para a maioria das aplicações o ideal é utilizar uma API fortemente tipada, como é o caso da NQ e do LINQ, mas em certas aplicações a construção de queries dinâmicas pode ser necessária. A API SODA preenche essa lacuna.

Para escrever Queries com a API Soda precisamos da interface IQuery, e para isso é preciso importar o seguinte namespace: using Db4objects.Db4o.Query; Adaptando para o nosso exemplo, uma Query SODA para retornar todos os países ficaria assim:

Note que a constraint da query é uma “meta descrição” dos objetos que queremos retornar. O resultado é a lista de todos os países cadastrados, o mesmo resultado que obtivemos com o QBE e NE nos outros POSTs.

Page 20: Db4o

A única restrição das Queries SODA que eu particularmente não gosto, é que as constraints precisam ser criadas apontando para os atributos privados da classe (private fields), e não para as propriedades. Isso inviabiliza o uso das Queries SODA quando usamos as propriedades automáticas (recurso incluso no C#3.0), conforme fizemos no exemplo da classe Country.

Porém, se nossa classe tivesse sido declarada sem o recurso das propriedades automáticas, como neste exemplo abaixo:

Poderíamos então executar uma Query SODA com uma condição aplicada aos atributos, conforme você pode ver no exemplo abaixo:

Page 21: Db4o

Esses exemplos mostram apenas o básico que se pode fazer com as Queries SODA. É possível criar queries bem mais avançadas. Mas o importante a notar aqui é que esse é um mecanismo bem mais complexo de se criar Queries, se comparado com as NQs. Porém, toda NQ por debaixo dos panos, é convertida em SODA, o que significa que as Queries SODA são mais performáticas.

No fim vamos notar que cada estilo de Query atende à uma necessidade, e não será incomum usar mais do que um estilo na mesma aplicação. No próximo POST vou falar do LINQ e fechar a sequencia de posts sobre as Queries em db4o.

Grande Abraço e até o próximo!