Несколько вопросов по работе с db4o - PullRequest
18 голосов
/ 25 октября 2009

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

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

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

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

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

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

  3. Какие-либо инструменты для просмотра сохраненных объектов в БД?

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

  4. Вы облажались при переименовании объектов вашего домена?

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

  5. Можно ли исключить свойства из сохраненных в БД?

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

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

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

Ответы [ 3 ]

13 голосов
/ 13 ноября 2009

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

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

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

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

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

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

2 голосов
/ 23 января 2012

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

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

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

1 голос
/ 15 ноября 2011

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

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

...