Является ли ссылка на файл для десериализации приемлемой в базе данных? - PullRequest
1 голос
/ 06 апреля 2011

У меня есть ситуация, когда мне нужно хранить некоторые данные, которые просто не ... действительно помещаются в таблицу базы данных. Это слишком абстрактно, и у меня недостаточно знаний, чтобы разбить его на части таким образом, чтобы его можно было разбить на таблицы и столбцы. Рассматриваемый объект - System.Linq.Expressions.Expression<T>.

Я обнаружил способ сериализации таких в xml с использованием MetaLinq. и он работает довольно хорошо, хотя генерируемый xml чрезмерно тучен, я несколько ожидал этого от чего-то такого сложного, как Expression. Скромное выражение получается около 19 кб.

Поэтому я подумал о том, чтобы использовать сжатие gzip для файла. Это работает хорошо, это экономит около 2 КБ.

Итак, мой реальный вопрос таков: это плохая практика или «опасная» практика - использовать столбец таблицы для ссылки на имя файла для десериализации объекта? Как у меня была бы таблица для выражений, и у нее было бы имя файла, когда это выражение вызывалось, оно выполняло декомпрессию gzip, десериализовало ее и возвращало объект.

Это кажется идеальным решением, но требует большого количества файловых операций ввода-вывода и большого количества различных сжатий / архивов / сериализаций. Мне интересно, смогу ли я узнать мнение более опытных администраторов баз данных? Я использую Fluent nHibernate как свой ORM маппер.

MetaLinq в кодовом комплексе

Ответы [ 2 ]

2 голосов
/ 06 апреля 2011

Не опытный администратор баз данных, но я бы сохранял сериализованные данные в поле BLOB в базе данных. Резервные копии базы данных бесполезны, если файлы, от которых зависят ваши данные, исчезают или наоборот. Я думаю, что это упростит вещи, чтобы просто сохранить все вместе. И BLOB-объект работает нормально, так как данные, которые вы храните, не нужно запрашивать.

1 голос
/ 06 апреля 2011

Зависит от размера данных.

Sql теперь имеет тип данных XML для столбцов таблицы.Таким образом, вы можете десериализовать объект и затем снова вставить весь объект в столбец в зависимости от размера.

Но если вам нужно использовать файловую систему, я бы сохранил путь и имя файла в столбце.В ваших программах app.config сохраните корень диска, например \\ MyDrive или d: \

. Таким образом, если информация перемещается, просто измените конфигурацию приложения, пока структура папок / файлов остается прежней.

Редактировать: Наряду с предложением NerdFury вы можете использовать двоичный сериализатор, если вам не нужно «видеть» данные в базе данных.XML-сериализация, по крайней мере, делает ее читабельной

...