数据库中是否可以接受反序列化的文件引用?

时间:2011-04-06 18:09:59

标签: c# xml database-design fluent-nhibernate xml-serialization

我有一种情况,我需要存储一些不会......真正适合数据库表的数据。它有点过于抽象,而且我没有足够的知识以一种可以分解为表格和列的方式来对其进行零碎处理。有问题的对象是System.Linq.Expressions.Expression<T>

我发现了一种使用MetaLinq将此类序列化为xml的方法。它运作得很好,尽管它产生的xml过于肥胖,我有点期待这么复杂的表达式。适度的表达式大约为19 kb。

所以我的想法是在文件上使用gzip压缩。这很好用,它可以节省大约2 kb。

那么,我的实际问题是:基本上使用表格列来引用对象的反序列化文件名是不好的做法还是“危险”做法?就像我有一个表的表达式,它将有一个文件名,当该表达式被调用时,它将执行gzip解压缩,反序列化它,并返回该对象。

这似乎是理想的解决方案,但它需要大量的文件I / O和许多各种压缩/压缩/序列化。我想知道我是否能够获得更有经验的数据库管理员的意见。我使用Fluent nHibernate作为我的ORM映射器。

MetaLinq on codeplex

2 个答案:

答案 0 :(得分:2)

不是经验丰富的DBA,但我会将序列化数据存储在数据库的BLOB字段中。如果您的数据所依赖的文件消失,则数据库备份不会有任何好处,反之亦然。我认为这会简化事情,只是将它们放在一起。 blob工作正常,因为您不需要查询存储的数据。

答案 1 :(得分:1)

取决于数据的大小。

现在,Sql具有表列的XML数据类型。因此,您可以反序列化对象,然后根据大小再次将整个对象插入列中。

但是如果必须使用文件系统,我会在列中存储路径和文件名。 在您的程序app.config中保留驱动器的根目录,如\\ MyDrive或d:\

如果信息移动,只要文件夹/文件结构保持不变,只需更改应用配置即可。

修改: 与NerdFury建议一起,如果您不需要“查看”数据库中的数据,您可以使用二进制序列化程序。 XML序列化至少使其可读