Хранение объектов в базе данных - PullRequest
0 голосов
/ 08 марта 2011

Я использую SQL Server 2008 с NHibernate для приложения.В приложении мне нужно создать несколько объектов класса Info и использовать его в нескольких местах.Мне также нужно хранить этот объект в базе данных.

Существует несколько типов класса Info.

Для хранения этих объектов класса Info у меня есть две опции

  • Сохранение объекта Serialized класса
  • Сохранить данные этого класса в виде строки.

В чем преимущество сохранения сериализованного объекта в базе данных по сравнению с сохранением его значений в виде нескольких строк?

-Ram

Ответы [ 4 ]

3 голосов
/ 08 марта 2011

Если вы сохраняете сериализованный объект в db:

  • Вам не нужно перестраивать его из частичных данных (т.е. написать свой собственный десериализатор, если поведение по умолчанию, создавать объекты изчастичные данные)
  • Необходимо создать объект «вручную»
  • В некоторых случаях может быть быстрее
  • Хранит избыточные данные инфраструктуры
  • Вы можете выбрать несколькоформаты (XML, пользовательский формат, BLOB-объекты)
  • Вы полностью подготовили сериализованные объекты, которые готовы к обработке где угодно (отправленные по сети, сохраненные на диске)

I youсохраняя несколько строк, вы:

  • Нужно строить объекты "вручную"
  • Может использовать данные базы данных в разных сценариях (из .net, для построения других структур, таких как кубы))
  • Данные намного компактнее
  • Может хранить данные в нормализованной реляционной форме, что (почти) всегда хорошая практика
  • Запрос данных
  • и оверБолее универсальное использование данных.

Я бы определенно пошел на реляционную нормализованную форму для хранения строк, а затем собрал соответствующий построитель классов в .net.

0 голосов
/ 08 марта 2011

Сериализованный объект (XML) Если вы храните класс как XML.Вы сможете искать контекст класса с помощью Xquery.Этот способ очень удобен, если вы хотите выполнить поиск (с условиями или без них).Более того, вы можете создать индекс по столбцу XML.Индекс XML сделает ваше приложение быстрее.

AS string Если у вас нет бизнес-логина, вы можете посмотреть содержимое класса.

0 голосов
/ 08 марта 2011

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

Однако, по крайней мере, если объект XmlSerialized в столбце XML в SQL, вы можете использовать такие технологии, как xquery и OPENXML , чтобы упростить поиск.

0 голосов
/ 08 марта 2011

Я бы определенно сохранял записи и поля, а не только кусок байтов (двоичный, текстовый или XML), представляющий текущее состояние вашего объекта.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...