Как использовать db4o IObjectContainer в веб-приложении?(Время жизни контейнера?)

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

  •  21-09-2019
  •  | 
  •  

Вопрос

Я оцениваю db4o на устойчивость для проекта ASP .NET MVC.

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

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

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

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

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

Это было полезно?

Решение

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top