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


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

Apresentações semelhantes


Anúncios Google