Comment utiliser db4o IObjectContainer dans une application web? (Durée de vie de conteneurs?)

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

  •  21-09-2019
  •  | 
  •  

Question

Je suis en train d'évaluer la persistance db4o pour un projet ASP .NET MVC.

Je me demande comment je devrais utiliser le IObjectContainer dans un contexte Web en ce qui concerne la vie objet. Comme je le vois, je peux faire une des opérations suivantes:

  1. Créez le IObjectContainer au démarrage de l'application et de garder la même instance pour toute la durée de l'application.
  2. Créer un IObjectContainer par demande.
  3. Lancer un serveur et obtenir un client IObjectContainer pour chaque interaction de base de données.

Quelles sont les implications de ces options, en termes de performance et de la concurrence?

La base de données est verrouillée lorsqu'une IObjectContainer est ouverte, je suis sûr que l'option 2) me avoir des problèmes avec la concurrence - serait-ce aussi le cas pour l'option 1?

Si je comprends bien, si je récupérer un objet à partir d'un IObjectContainer, il doit être sauvé par la même instance IObjectContainer - pour que db4o pour l'identifier comme étant le même objet. Par conséquent, si je choisis l'option 3), je dois récupérer l'objet d'origine, apportez les modifications nécessaires (données de copie d'un objet modifié), puis le stocker en utilisant la même IObjectContainer. Est-ce vrai ?

Était-ce utile?

La solution

Option 1) peut vous causer des problèmes sérieux parce que vous partagerez effectivement une transaction entre toutes les demandes. Je ne pense pas que cela soit une option possible.

Comme vous avez déjà identifié, l'option 3) se heurte à ses propres périls parce que vous devez garder une trace de l'identité d'objet manuellement - une tâche fastidieuse et très sujette aux erreurs. Cela détruit vraiment toute la beauté de la base de données objet. En outre, de ce que je sais les frais généraux de la création IObjectContainer n'est pas petit donc ce sera beaucoup trop cher.

Cela nous laisse beaucoup à peu avec l'option 2, qui ne se verrouille pas la base de données lors de l'ouverture en mode client-serveur pour autant que je sais - où avez-vous trouvé que informaiton? Donc, la meilleure idée est d'ouvrir un IObjectServer au démarrage de l'application et ouvrir une nouvelle IObjectContainer par demande, ou se connecter à un serveur distant via le protocole TCP par demande.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top