Подтвердить что ты не робот

Несколько вопросов о работе с db4o

Я пытаюсь db4o object databse, и до сих пор мне очень нравится то, что я вижу, но я также читаю этот пост в stackoverflow db4o experience?, указывая на то, что не все что кажется таким легким легко.

Сейчас у меня есть некоторые вопросы относительно того, как db4o используется в приложениях реального мира. Поэтому, если у вас есть опыт работы (особенно в контексте веб-приложения) с db4o, я бы хотел их услышать.

Вот мои вопросы:

  • Как вы управляете идентификацией объекта при работе с хранимыми объектами db4o? **
    Исходя из RDBMS-фона, где у вас обычно всегда есть первичный ключ/столбец идентификатора для каждой таблицы, я не могу сейчас представить, как управлять идентификацией объекта в db4o.

    Например, если я работал с NHibernate/mysql и вам нужно было найти объект User по id, я бы сделал session.Load(primaryKey), и он будет извлечен его PK. Также очень часто, что PK определяется как автоматическое увеличение в определении таблицы.

  • Поскольку в db4o такой опции нет, моя мысль заключалась в использовании структуры Guid для идентификации некоторых объектов в базе данных объектов.

  • Любые инструменты для просмотра сохраненных объектов в db?

    Есть ли что-то вроде SQL Server Management Studio (возможно, менее сложного) в мире db4o? Я хотел бы просмотреть уже сохраненные данные/объекты в файле db.

  • Привинчиваются ли вы при переименовании объектов домена?

    Насколько я знаю, когда вы переименовываете класс, все ранее сохраненные экземпляры в db больше не могут быть восстановлены. Есть ли способ обойти эту проблему? Как вы имеете дело с обновлениями против живой базы данных, которая уже содержит много объектов?

  • Можно ли исключить свойства для сохранения в БД?

    Если, например, один объект домена содержит ссылку на объект службы (без состояния), тогда объект службы также будет сохранен, если объект домена будет сохранен, правильно?

Кажется немного странным, что в базе данных хранится служба, по крайней мере для меня.

Можно ли исключить экземпляр службы из хранилища? Если объект домена будет восстановлен снова, как я могу убедиться, что служба снова добавлена ​​в экземпляр?

4b9b3361

Ответ 1

1) Как управлять идентификацией объекта при работе с хранимыми объектами db4o? В db4o у вас обычно нет идентификатора. db4o использует идентификатор объекта, чтобы отличить объект друг от друга. Таким образом, один и тот же объект в памяти будет одним и тем же объектом для базы данных.

До тех пор, пока вы не сериализуете объект, это отлично работает. Однако, как только объекты сериализуются/отключены, это больше не работает. Например, в веб-сценарии: вы отправляете данные в браузер. Теперь вам нужно снова идентифицировать объекты с помощью некоторых идентификаторов.

Я думаю, что возможны три варианта: - Используйте внутренний идентификатор db4o. Однако этот идентификатор не навсегда. Дефрагментация базы данных меняет этот идентификатор. - Используя db4o UUIDs. Но db4o UUID довольно большие - Создание идентификаторов самостоятельно

2) Существует инструмент Object-Manager для просмотра базы данных. Однако он крайне ограничен в своем текущем состоянии. По-моему, это огромный недостаток для db4o.

3) Вы можете создать псевдонимы, переименовать классы и поля и т.д.. Однако изменение иерархии наследования не работает. Затем вам нужно скопировать старые данные в новые экземпляры.

4) Да. Вы можете пометить поля как transient с атрибутом .NET-NonSerialized или настраиваемыми атрибутами.

Ответ 2

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

"Навигация" означает, что вы просто следуете полям/ссылкам в любом загруженном объекте.

Использование идентификаторов объектов может считаться плохим стилем, большинство приложений (я знаю) не используют их вообще.

Ответ 3

Выполняя некоторую работу с DB4O, я написал простой браузер объектов DB4O, который работает намного лучше, чем включенный. Попробуйте, это с открытым исходным кодом.

http://sourceforge.net/projects/db4oviewer/develop