Несколько вопросов по работе с db4o
Вопрос
Я пробую базу данных объекта 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, который работает намного лучше, чем включенный. Попробуйте, это с открытым исходным кодом.