Вопрос

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Решение

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

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

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

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

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

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

    Другие советы

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

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

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

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

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

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