Domanda

Sto valutando db4o per la persistenza di un progetto ASP .NET MVC.

Mi chiedo come dovrei usare l'IObjectContainer in un contesto web per quanto riguarda durata degli oggetti. Come la vedo io, non posso fare uno dei seguenti modi:

  1. Crea l'IObjectContainer all'avvio dell'applicazione e mantenere la stessa istanza per l'intero ciclo di vita dell'applicazione.
  2. Creare un'IObjectContainer per ogni richiesta.
  3. Avvia un server, e ottenere un client IObjectContainer per ogni interazione del database.

Quali sono le implicazioni di queste opzioni, in termini di prestazioni e la concorrenza?

Dato che il database è bloccato quando un IObjectContainer è aperto, io sono abbastanza sicuro che l'opzione 2) mi avrebbe portato alcuni problemi con la concorrenza - sarebbe questo anche il caso per l'opzione 1?

A quanto ho capito, se posso recuperare un oggetto da un IObjectContainer, esso deve essere salvato dalla stessa istanza IObjectContainer - in modo per db4o per identificarla come lo stesso oggetto. Pertanto, se scelgo l'opzione 3), avrei dovuto recuperare l'oggetto originale, apportare le modifiche necessarie (Copiare i dati da un oggetto modificato), e quindi memorizzare utilizzando lo stesso IObjectContainer. È vero ?

È stato utile?

Soluzione

L'opzione 1) si può ottenere in guai seri, perché si condividere efficacemente una transazione tra tutte le richieste. Non credo che questa sia un'opzione fattibile.

Come già identificato, opzione 3) è pieno con i propri pericoli, perché si dovrà tenere traccia di identità di un oggetto manualmente - un compito noioso ed estremamente soggetto a errori. Questo distrugge veramente tutta la bellezza del database degli oggetti. Inoltre, da quello che so il sovraccarico di creare IObjectContainer non è piccola, quindi questo sarà troppo costoso.

Questo ci lascia più o meno con l'opzione 2, che non bloccare il database quando viene aperto in modalità client-server per quanto ne so - dove hai trovato che informaiton? Quindi l'idea migliore è quella di aprire un IObjectServer all'avvio dell'applicazione e aprire nuovi un IObjectContainer per-richiesta, o connettersi a un server remoto utilizzando il protocollo TCP per-richiesta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top