Pergunta

Eu estou tentando o db4o objeto databse e até agora eu gosto bastante o que eu estou vendo, mas eu também ler este post sobre stackoverflow db4o experiências? indicando que nem tudo o que parece tão fácil é fácil.

Agora, eu tenho algumas perguntas a respeito de como db4o é usado em aplicações do mundo real. Então, se você tem alguma experiência no trabalho (especialmente no contexto do aplicativo web) com db4o, eu gostaria de ouvi-los.

Aqui estão as minhas perguntas:

  1. Como você gerenciar a identidade do objeto ao trabalhar com db4o objetos armazenados? **
    Vindo de RDBMS fundo onde você normalmente tem sempre uma coluna de chave / identidade primária para cada mesa, eu não posso imaginar agora sobre como gerenciar a identidade do objeto em db4o.

    Por exemplo, se eu estava trabalhando com NHibernate / mysql e precisava encontrar um objeto Usuário por id, eu faria Session.load (primaryKey) e será recuperada pelo seu PK. Também é muito comum que o PK é definido como auto incremento na definição da tabela.

  2. Como não existe essa opção no db4o, meu pensamento estava usando um struct Guid, a fim de identificar alguns objetos no banco de dados objeto.

  3. Todas as ferramentas para visualizar os objetos armazenados no db?

    Existe algo como SQL Server Management Studio (provavelmente menos sofisticados) no mundo do db4o? Eu gostaria de ver os já armazenados dados / objetos no arquivo db.

  4. Você está aparafusada ao renomear objetos de seu domínio?

    Tanto quanto eu sei quando você renomeia uma classe, quaisquer casos previamente armazenados no db não pode ser recuperado mais. Existe uma maneira de contornar esse problema? Como você lida com as atualizações contra um banco de dados ao vivo que já contém muitos objetos?

  5. Posso excluir propriedades de serem salvas no DB?

    Se, por exemplo, um objeto de domínio contém uma referência a um (apátridas) objeto de serviço, em seguida, o objeto de serviço também será persistido se o objeto de domínio fica persistiu, certo?

Parece um pouco estranho ter um instace serviço salvo no banco de dados, pelo menos para mim.

Você pode excluir a instância de serviço de ser salvo? Se o objeto de domínio é recuperada novamente, como posso ter certeza de que o serviço também é injetado na instância novamente?

Foi útil?

Solução

1) Como você gerenciar a identidade do objeto ao trabalhar com db4o objetos armazenados? Em db4o você tem normalmente não id. db4o usa o objeto-identidade para distinguir o objeto distante. Assim, o mesmo objeto na memória vai ser o mesmo objeto para o banco de dados.

Enquanto a você não serialize objeto esta multa funciona. No entanto, logo que os objetos são serializados / desconectado isso não funciona mais. Por exemplo, em um cenário-web: Você envia os dados para o navegador. Agora você precisa identificar os objetos depois novamente por alguns ids.

Eu acho que isso três opções são possíveis: - Use o db4o ID interno . No entanto, este ID não é para sempre. Desfragmentar o banco de dados muda este id. - Usando do db4o UUIDs . Mas db4o UUIDs são bastante grandes - Criação de ids por si mesmo

2) Há um-Object Manager Ferramenta de olhar para o banco de dados. No entanto, extremamente limitada em seu estado atual. Na minha opinião esta é uma desvantagem enorme para db4o.

3) Você pode criar aliases, aulas de renomear e campos etc . Contudo alterar a herança hierarquia não funciona. Então você precisa copiar os dados antigos para novas instâncias.

4) Sim. Você pode marcar campos como transitória com o atributo ou personalizados atributos do NET-NonSerialized.

Outras dicas

não deve realmente ser usado bancos de dados nos objetos orientados (como db4o) a identidade do objeto. Em vez de um usado consultas e navegação. Primeiro executar uma consulta para obter um / alguns objetos, em seguida, usar a navegação para chegar a outros.

meios 'Navegação', que basta seguir os campos / referências em qualquer objeto carregado.

Usando identificadores de objeto pode ser considerado mau estilo, aplicação mais (que eu saiba) não usá-los em tudo.

Ao fazer algum trabalho com DB4O, eu escrevi um navegador objeto DB4O simples que funciona muito melhor do que o incluído. Experimentá-lo, é open source.

http://sourceforge.net/projects/db4oviewer/develop

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top