Como usar o db4o iobjectContainer em um aplicativo da web? (Lifetime de contêiner?)

StackOverflow https://stackoverflow.com/questions/2488010

  •  21-09-2019
  •  | 
  •  

Pergunta

Estou avaliando o DB4O para persistência para um projeto ASP .NET MVC.

Estou me perguntando como devo usar o iObjectContainer em um contexto da web em relação à vida útil do objeto. Eu vejo, posso fazer um dos seguintes:

  1. Crie o IObjectContainer na inicialização do aplicativo e mantenha a mesma instância durante toda a vida útil do aplicativo.
  2. Crie um iObjectContainer por solicitação.
  3. Inicie um servidor e obtenha um IObjectContainer do cliente para cada interação do banco de dados.

Quais são as implicações dessas opções, em termos de desempenho e simultaneidade?

Como o banco de dados está bloqueado quando um IObjectContainer é aberto, tenho certeza de que a opção 2) me daria alguns problemas com a simultaneidade - esse também seria o caso da opção 1?

Pelo que entendi, se eu recuperar um objeto de um IObjectContainer, ele deve ser salvo pela mesma instância do IObjectContainer - para que o DB4O o identifique como sendo o mesmo objeto. Portanto, se eu escolher a opção 3), teria que recuperar o objeto original, fazer as alterações necessárias (copiar dados de um objeto modificado) e armazená -lo usando o mesmo iObjectContainer. Isso é verdade ?

Foi útil?

Solução

Opção 1) pode causar problemas sérios, pois você compartilhará efetivamente uma transação entre todas as solicitações. Eu não acho que essa seja uma opção viável.

Como você já identificou, a opção 3) está repleta de perigos, porque você terá que acompanhar a identidade do objeto manualmente - uma tarefa tediosa e extremamente propensa a erros. Isso realmente destrói toda a beleza do banco de dados de objetos. Além disso, pelo que sei a sobrecarga de criar IObjectContainer não é pequeno, então isso será muito caro.

Isso nos deixa praticamente com a opção 2, que não bloqueia o banco de dados quando aberto no modo cliente -servidor, tanto quanto eu sei - onde você encontrou essa informação? Portanto, a melhor idéia é abrir um IObjectServer na inicialização do aplicativo e abrir um novo IObjectContainer por solicitação ou conecte-se a um servidor remoto usando o TCP por solicitação.

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