Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouAugusto Prado Alterado mais de 9 anos atrás
1
Banco de Dados não Convencionais Fausto Maranhão Ayres 14 BDOO – db4o
2
Características do DB4O
Nasceu em 2001 ( Foi comprado pela VERSANT Nativo para Java, .Net, Android (portabilidade) Embarcado: 400k de RAM (.jar ou .dll) Cliente/Servidor Baixo custo Licença GPL Não necessita de administração arquivos com 450 Gb Visualização dos objetos: ObjectManager Fausto Maranhão Ayres
3
Versão 7.4 Fausto Maranhão Ayres
4
Plugin Eclipse Install new Software
Fausto Maranhão Ayres
5
Características do DB4o
Usuários em mais de168 países: Casos de Sucesso sistema de controle de trens bala espanhol - AVE. Fausto Maranhão Ayres
6
Características do DB4o
Segurança há a possibilidade de criptografar informações no banco Desempenho Armazena até objetos/segundo 44x mais rápido se comparado com o Hibernate+Mysql Tabela comparativa: Fausto Maranhão Ayres
7
Tabela comparativa Fausto Maranhão Ayres
8
Persistência Transparente
Não necessita de anotações A propagação da persistência é automática Permite indexação de atributos da classe Qualquer mudança na estrutura do objeto é detectada em tempo de execução (via reflexão) e propagada no BD Fausto Maranhão Ayres
9
Persistência Transparente
Pode-se definir atributos Não-Persistentes public class Pessoa { private String nome; transient String idade; ... } Fausto Maranhão Ayres
10
API
11
API com.db4o – principal com.db4o.ext – extensões
com.db4o.config – configurações com.db4o.query – consultas nativas Fausto Maranhão Ayres
12
com.db4o.ObjectContainer
Gerencia objetos persistentes ObjectContainer db; //o nosso manager db.openFile() db.close() db.store() // substituiu db.set() db.queryByExample() // substituiu db.get() db.delete() db.commit() db.rollback() Versão anterior Fausto Maranhão Ayres
13
Abrir, Fechar, Gravar, Atualizar
para apagar o arquivo antes use : new File(“banco.db4o”).delete(); import com.db4o.*; ... ObjectContainer db = Db4o.openFile(“banco.db4o”); Pessoa p = new Pessoa(“joao”, 25); db.store(p); db.commit(); p.setIdade(15); db.store(p); //regravação (atualização) db.close(); A operação store() inicia uma transação. Um commit() ou close() confirma a transação Fausto Maranhão Ayres
14
Transação ObjectContainer db = Db4o.openFile(“banco.db4o”); try{ ...
...manipulação dos objetos db.commit(); } catch(Exception e){ db.rollback(); finally{ if (db!= null) db.close(); Fausto Maranhão Ayres
15
Recuperação de Falhas Existe uma proteção contra falhas de hardware, energia, jvm, etc, durante um commit DB4o usa a estratégia resume-commit-on-crash onde o commit que falhou é re-executado quando o bd for reaberto Fausto Maranhão Ayres
16
Visualização dos objetos no banco
Execute ObjectManager.bat objeto classe Fausto Maranhão Ayres
17
Implementa a interface List
Consultas básicas Um objeto é recuperado a partir de um “objeto exemplo”, contendo os campos de busca Ex: localizar o joao ObjectSet <Pessoa> resultados = db.queryByExample(new Pessoa(“joao“, 0)); if(resultados.size()>0) Pessoa p = resultados.get(0); else System.out.println(“inexistente”); objeto exemplo - busca por nome Implementa a interface List Fausto Maranhão Ayres
18
Consultas básicas Ex: Listar todas as pessoas com idade = 40
Pode-se usar array ou coleções na consulta List<Pessoa> resultados = db.queryByExample(new Pessoa(null, 40)); for(Pessoa p: resultados) System.out.println(p); List<Telefone> lista = new ArrayList... lista.add(“ ”); lista.add(“ ”); List<Pessoa> resultados = db.queryByExample(new Pessoa(null,0,lista)); ... Fausto Maranhão Ayres
19
Consultas básicas Ex: Listar todos os empregados (e subclasses)
Ex: Listar todos os vendedores List<Empregado> resultados = db.query(Empregado.class); for(Empregado p: resultados) System.out.println(p); List<Vendedor> resultados = db.query(Vendedor.class); for(vendedor p: resultados) System.out.println(p); Fausto Maranhão Ayres
20
Unicidade de objetos no BD
Um BDOO não tem chave primária É de sua responsabilidade verificar a existência de um objeto antes de gravá-lo Para isso, você arbitrará um atributo como chave Ex: usar nome como chave objeto exemplo com chave “joao” List<Pessoa> resultados = db.queryByExample(new Pessoa(“joao“,0) ); if(resultados.size() == 0){ db.store( new Pessoa(“joao“, 25) ); db.commit(); } objeto gravado sem duplicata Fausto Maranhão Ayres
21
Remover um objeto Deve-se localizar o objeto antes de remove-lo
Ex: apagar o joao objeto exemplo List<Pessoa> resultados = db.queryByExample( new Pessoa(“joao“,0) ); if(resultados.size() > 0) { Pessoa p = resultados.get(0); db.delete(p); db.commit(); } else System.out.println(“inexistente”); Fausto Maranhão Ayres
22
Remover todos os objetos do bd
Ex: apagar todas as pessoas Ex: apagar todos os objetos List<Pessoa> resultados = db.query(Pessoa.class); for(Pessoa p: resultados) { db.delete(p); db.commit(); } List<Object> resultados = db.query(Object.class); for(Object o: resultados) { o.delete(p); db.commit(); } Fausto Maranhão Ayres
23
Persistência em Cascata
A persistência de um objeto é feita, automaticamente, em cascata. Ex: Pessoa p = new Pessoa(“joao“,25); p.addTelefone( “ ”); p.addTelefone( “ ”); db.store(p); db.commit(); ... Os telefones também serão gravados junto com Pessoa Fausto Maranhão Ayres
24
Atualização em Cascata
A atualização de um objeto não é feita em cascata. Ex: List<Pesssoa> resultados = db.queryByExample(new Pessoa(“joao“,0)); Pessoa p = resultados.get(0); p.addTelefone(“ ”); p.addTelefone(“ ”); db.store(p); db.commit(); ... Esses novos telefones não serão gravados!! Fausto Maranhão Ayres
25
Configurações
26
Atualização em Cascata
Para que a atualização, exclusão e recuperação seja feita em cascata, devemos configurá-las antes de abrir o banco: Configuration conf = Db4o.newConfiguration(); conf.objectClass(Pessoa.class).cascadeOnUpdate(true); conf.objectClass(Pessoa.class).cascadeOnDelete(true); conf.objectClass(Pessoa.class).cascadeOnActivate(true); ... ObjectContainer db= Db4o.openFile(conf , “banco.db4o”); Fausto Maranhão Ayres
27
Cuidado!!! Se duas pessoas referenciarem o mesmo telefone e a primeira delas for excluída em cascata? A segunda pessoa ficará sem telefone e ocorrerá um erro ao tentar acessá-lo Fausto Maranhão Ayres
28
Refatoração Automática
Cada vez que o sistema é iniciado, o db4o verifica se houve alguma alteração na estrutura da classe. Inclusão de atributo db4o adiciona automaticamente o novo atributo e armazena valores default para os objetos antigos Remoção de atributo db4o ignora os atributos excluídos quando recupera um objeto. Os atributos são efetivamente removidos quando o bd é defragmentado. Para desabilitar a refatoração automática: conf.DetectSchemaChanges(false); Fausto Maranhão Ayres
29
Indexação Índices otimizam o acesso aos objetos
É especificado na configuração do banco: conf.objectClass(Pessoa.class).objectField(“nome“) .indexed(true); Fausto Maranhão Ayres
30
Consultas
31
Tipos de consultas Query-By-Example Native Queries S.O.D.A
Fausto Maranhão Ayres
32
1- Query By Example Limitações
resp = db.querByExample(new Pessoa(...)); Limitações Consulta só de igualdade Não podemos indicar quais elementos não participarão da consulta? Não podemos usar AND, OR, NOT, etc. Não podemos manipular valores default (0, "“, null) Não podemos inicializar atributos na sua declaração da classe Fausto Maranhão Ayres
33
É executado para cada instância
2-Native Queries (NQ) São escritas na própria linguagem Java Permite código 100% tipado, compilado e refatorável permite aplicar um trecho de código para todos os objetos da classe. Permite usar métodos da própria classe É executado para cada instância List<Empregado> lista = db.query( new Predicate<Empregado>() { public boolean match(Empregado e) { return e.getSalario() > 1000; } } ); Fausto Maranhão Ayres
34
3- S.O.D.A Simple Object Database Access é uma API de consulta baseada em nós de grafos para criação de consultas dinâmicas. Ela permite executar consultas no servidor, reduzindo o tráfego de rede e o tempo de execução da consulta. Desvantagem: usa strings para identificar campos, não sendo 100% tipada nem compilada. Fausto Maranhão Ayres
35
Exemplo Consulta sobre o grafo de objetos Query q = db.query();
q.constrain(Pessoa.class); q.descend("telefones").descend("numero").constrain(“ ”); List<Pessoa> result = q.execute(); println( result.next() ); Fausto Maranhão Ayres
36
Otimização de bytecodes
Uma consulta NATIVA é transformada internamente numa consulta SODA Os bytecodes do método match() são otimizados, visando o mínimo de instanciação de objetos na memória Otimizador de bytecodes -> nqopt.jar Fausto Maranhão Ayres
37
Pacote com.db4o.ext (extensões)
38
package com.db4o.ext A classe ExtObjectContainer contém métodos avançados: Verificar se objetos estão gerenciados pelo container Obter a lista de classes gerenciadas pelo container, Gerenciar concorrência, etc Acesso ExtObjectContainer ext = db.ext() Fausto Maranhão Ayres
39
Recarregar um objeto para a memória
Refresh Recarregar um objeto para a memória Pessoa p = db.queryByExample(new Pessoa(“joao”)); p.setNome(“joana”); println(p); //joana db.ext().refresh(p, Integer.MAX_VALUE); println(p); //joao Fausto Maranhão Ayres
40
Acesso ao OID do objeto OID = identificador interno do objeto
// obter o OID do objeto Pessoa p = db.queryByExample(...); long oid = db.ext().getID(p) ; //acesso ao banco usando OID p = (Pessoa) db.ext().getByID(oid) ; Fausto Maranhão Ayres
41
FIM Fausto Maranhão Ayres
42
Persistindo um objeto complexo
Exemplo: //gravação Set<Aluno> alunos = new HashSet<Aluno>(); ... db.store(alunos); //leitura ObjectSet result = db.queryByExample(new HashSet<Aluno>()); alunos = result.next() Fausto Maranhão Ayres
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.