在SQL Server中存储大量XML类型数据的最佳实践

时间:2009-09-24 23:22:18

标签: xml sql-server-2008

在SQL Server 2008中存储XML字段类型数据方面,是否有人可以分享任何最佳实践?我们有许多小的XML结构,但有些更大(> 50MB)。我们发现DELETE的事情变得有点慢。任何建议/战争故事都将受到赞赏。

5 个答案:

答案 0 :(得分:5)

我看到目前为止大多数答案都是针对数据库之外的。

我们已经完成了一次,将文件添加到文件系统,并在数据库的表中添加文件的名称。这方面的主要问题是:

  • 文件系统不是事务性的,因此如果出现问题,它可能会失去同步
  • 你必须单独进行备份,根据定义,恢复将不同步

对于所有新项目,我们将文件存储在varbinary(max)字段中。这对我们来说效果很好,在成千上万的用户中也是如此。

答案 1 :(得分:3)

数据库外的另一次投票。

过去,我使用的方法类似于James推荐的方法,但SQL Server 2008支持新的FILESTREAM存储选项,它可以在NTFS上存储数据库外的varbinary(max)列,可能值得研究

SQL Books Online有很多好的信息,从“FILESTREAM概述”开始。

答案 2 :(得分:2)

我同意将大文件存储在数据库之外

您可以存储文件的路径

在我工作的一个项目中,我有另一个表,可以跟踪webapp中所有用户上传的数据...每当用户上传文件时,我会在此表中创建一个新行并使用fileID主键作为各种其他表中的外键

它大大减少了后来发生的许多变化,比如当我不得不更改上传目录的根路径等时

答案 3 :(得分:1)

您可能希望将大文件存储为文件,并将路径存储在数据库中,除非您计划在选择中对xml文件进行搜索。

我倾向于在数据库之外存储大型文件,因为它实际上并非设计用于存储这些文件。如果您要搜索,那么您可以使用DLINQ和XLINQ来方便搜索各种xml文件。

答案 4 :(得分:1)

存储元数据!

数据库外部也是我们存储大型数据集的方式,除了我强烈建议在文件中添加一些元信息,这样如果文件与数据库不同步,你就可以半自动重新同步它。这样,您可以先创建或更新文件,然后更新数据库,而不必担心数据库更新会崩溃。

大量文件管理 大多数文件系统都可以将大量文件存储在一起,但它们的确会随着时间的推移开始工作。强烈建议根据某些哈希值执行子文件夹。例如,如果所有文件名都是整数,则每个目录存储10000个文件,并将目录名称计算为(文件名%10000)* 10000 - 在调试时,您将能够更容易地找到该文件。