Как использовать db4o IObjectContainer в веб-приложении?(Срок службы контейнера?) - PullRequest
1 голос
/ 21 марта 2010

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

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

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

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

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

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

1 Ответ

2 голосов
/ 21 марта 2010

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

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

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

...