2010-03-21 2 views
1

Я оцениваю db4o для сохранения для проекта ASP.NET MVC.Как использовать db4o IObjectContainer в веб-приложении? (Время жизни контейнера?)

Мне интересно, как я должен использовать объект IObjectContainer в контексте сети в отношении срока жизни объекта. Как я вижу, я могу сделать одно из следующего:

  1. Создайте IObjectContainer при запуске приложения и сохраните тот же экземпляр для всего жизненного цикла приложения.
  2. Создайте один объект IObjectContainer для каждого запроса.
  3. Запустите сервер и получите клиентский IObjectContainer для каждого взаимодействия с базой данных.

Каковы последствия этих вариантов с точки зрения производительности и параллелизма?

Поскольку база данных заблокирована при открытии IObjectContainer, я уверен, что опция 2) вызовет у меня некоторые проблемы с параллелизмом - будет ли это также иметь место для опции 1?

Как я понимаю, если я извлекаю объект из объекта IObjectContainer, он должен быть сохранен одним и тем же экземпляром IObjectContainer - для того, чтобы db4o идентифицировал его как один и тот же объект. Поэтому, если я выберу вариант 3), мне нужно будет восстановить исходный объект, внести необходимые изменения (скопировать данные из измененного объекта), а затем сохранить его с помощью одного и того же IObjectContainer. Это правда ?

ответ

2

Вариант 1) может вызвать у вас серьезные проблемы, потому что вы сможете эффективно совершать транзакции среди всех запросов. Я не думаю, что это приемлемый вариант.

Как вы уже определили, вариант 3) чреват своими собственными опасностями, потому что вам придется вручную отслеживать идентификацию объекта - утомительную и чрезвычайно подверженную ошибкам задачу. Это действительно разрушает всю красоту базы данных объектов. Кроме того, из того, что я знаю, накладные расходы на создание IObjectContainer невелики, поэтому это будет слишком дорого.

Это в значительной степени оставляет нам вариант 2, который не блокирует базу данных при открытии в режиме клиент-сервер, насколько я знаю, - где вы нашли эту информацию? Поэтому наилучшей идеей является открытие IObjectServer при запуске приложения и открытие нового IObjectContainer для каждого запроса или подключение к удаленному серверу с использованием TCP для каждого запроса.