A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Banco de Dados não Convencionais Fausto Maranhão Ayres 14 BDOO – db4o.

Apresentações semelhantes


Apresentação em tema: "Banco de Dados não Convencionais Fausto Maranhão Ayres 14 BDOO – db4o."— Transcrição da apresentação:

1 Banco de Dados não Convencionais Fausto Maranhão Ayres 14 BDOO – db4o

2 Fausto Maranhão Ayres 2 Características do DB4O Nasceu em 2001 (www.db4o.com)www.db4o.com 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

3 Fausto Maranhão Ayres 3 Versão 7.4

4 Fausto Maranhão Ayres 4 Plugin Eclipse Install new Software

5 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.

6 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:

7 Fausto Maranhão Ayres 7 Tabela comparativa

8 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

9 Fausto Maranhão Ayres 9 Persistência Transparente Pode-se definir atributos Não-Persistentes public class Pessoa { private String nome; transient String idade;... } public class Pessoa { private String nome; transient String idade;... }

10 API

11 Fausto Maranhão Ayres 11 API com.db4o – principal com.db4o.ext – extensões com.db4o.config – configurações com.db4o.query – consultas nativas

12 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

13 Fausto Maranhão Ayres 13 Abrir, Fechar, Gravar, Atualizar import com.db4o.*;... ObjectContainer 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.commit(); db.close(); A operação store() inicia uma transação. Um commit() ou close() confirma a transação para apagar o arquivo antes use : new File(“banco.db4o”).delete(); para apagar o arquivo antes use : new File(“banco.db4o”).delete();

14 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(); } ObjectContainer db = Db4o.openFile(“banco.db4o”); try{......manipulação dos objetos db.commit(); } catch(Exception e){ db.rollback(); } finally{ if (db!= null) db.close(); }

15 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

16 Fausto Maranhão Ayres 16 Visualização dos objetos no banco Execute ObjectManager.bat objeto classe

17 Fausto Maranhão Ayres 17 Consultas básicas Um objeto é recuperado a partir de um “objeto exemplo”, contendo os campos de busca Ex: localizar o joao ObjectSet 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 objeto exemplo - busca por nome Implementa a interface List

18 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 resultados = db.queryByExample(new Pessoa(null, 40)); for(Pessoa p: resultados) System.out.println(p); List lista = new ArrayList... lista.add(“ ”); lista.add(“ ”); List resultados = db.queryByExample(new Pessoa(null,0,lista));...

19 Fausto Maranhão Ayres 19 Consultas básicas Ex: Listar todos os empregados (e subclasses) Ex: Listar todos os vendedores List resultados = db.query(Empregado.class); for(Empregado p: resultados) System.out.println(p); List resultados = db.query(Vendedor.class); for(vendedor p: resultados) System.out.println(p);

20 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 List resultados = db.queryByExample(new Pessoa(“joao“,0) ); if(resultados.size() == 0){ db.store( new Pessoa(“joao“, 25) ); db.commit(); } objeto exemplo com chave “joao” objeto gravado sem duplicata

21 Fausto Maranhão Ayres 21 Remover um objeto Deve-se localizar o objeto antes de remove-lo Ex: apagar o joao List 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”); objeto exemplo

22 Fausto Maranhão Ayres 22 Remover todos os objetos do bd Ex: apagar todas as pessoas Ex: apagar todos os objetos List resultados = db.query(Pessoa.class); for(Pessoa p: resultados) { db.delete(p); db.commit(); } List resultados = db.query(Object.class); for(Object o: resultados) { o.delete(p); db.commit(); }

23 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

24 Fausto Maranhão Ayres 24 Atualização em Cascata A atualização de um objeto não é feita em cascata. Ex: List 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!!

25 Configurações

26 Fausto Maranhão Ayres 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”);

27 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

28 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);

29 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);

30 Consultas

31 Fausto Maranhão Ayres 31 Tipos de consultas 1. Query-By-Example 2. Native Queries 3. S.O.D.A

32 Fausto Maranhão Ayres Query By Example 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

33 Fausto Maranhão Ayres 33 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 List lista = db.query( new Predicate () { public boolean match(Empregado e) { return e.getSalario() > 1000; } } ); List lista = db.query( new Predicate () { public boolean match(Empregado e) { return e.getSalario() > 1000; } } ); É executado para cada instância

34 Fausto Maranhão Ayres 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.

35 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 result = q.execute(); println( result.next() ); Query q = db.query(); q.constrain(Pessoa.class); q.descend("telefones").descend("numero").constrain(“ ”); List result = q.execute(); println( result.next() );

36 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

37 Pacote com.db4o.ext (extensões)

38 Fausto Maranhão Ayres 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()

39 Fausto Maranhão Ayres 39 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

40 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) ;

41 FIM Fausto Maranhão Ayres 41

42 Fausto Maranhão Ayres 42 Persistindo um objeto complexo Exemplo: //gravação Set alunos = new HashSet ();... db.store(alunos); //leitura ObjectSet result = db.queryByExample(new HashSet ()); alunos = result.next()


Carregar ppt "Banco de Dados não Convencionais Fausto Maranhão Ayres 14 BDOO – db4o."

Apresentações semelhantes


Anúncios Google