2009-02-05 89 views
10

将XML存储为XML类型而不是text/varchar/ntext更有意义吗(服务器端验证XML/schema/dtd除外)?我不打算在数据库端执行任何XML操作。Microsoft SQL Server 2005/2008:XML vs text/varchar数据类型

我调查的目的是为了减少数据库的大小。我可以使用XML data type作为此类用途的非类型化XML吗?优缺点都有什么?

我找到了article related to the topic,但我不确定作者的假设/结论是否正确。

回答

7

我的快速调查显示,MS SQL 2005(速成版)

的Microsoft SQL Server 2005 - 9.00.3073.00(英特尔X86) 2008年8月5日12时31分12秒 版权所有(C)1988- 2005在Windows NT 6.0微软公司 快捷版(建设6000:)

存储XML与开销约70%(可能更快的处理/分析)。

我的数据之前转换:行数= 160320,保留= 178576 KB,数据= 178184 KB,index_size = 272 KB,未使用的= 120 KB

我的数据在转换之后:行数= 160320,保留= 309702 KB ,data = 307216 KB,index_size = 1672 KB,未使用= 184 KB

因此,如果您不打算在数据库端使用XML技术,则将XML数据存储为XML数据类型没有任何意义。

+0

你确定数据库的大小增加了吗?这与Saulius所说的相反。这对我来说很重要,因为我有一个日志记录模块写入数据库,我的团队中的一些人建议用XML保留一些日志细节。如果数据库会减少,我可能会考虑转换为XML,但如果数据库大小增加绝对不会。 – 2010-05-21 15:19:58

7

如果将xml存储在xml类型的列中,数据将不会被存储为简单文本,就像在nvarchar的情况下一样,它将存储在某种解析的数据树中,反过来将会比unparsed的xml版本。这不仅可以减小数据库的大小,还可以为您提供其他优势,如验证,轻松操作等(即使您没有使用任何这些方法,它们仍然可以用于将来使用)。

另一方面,服务器必须在插入时解析数据,这可能会减慢数据库速度 - 您必须做出速度与大小的决定。

编辑:

就个人而言,我认为在数据库中的数据应该只有当它具有结构,这是很难在关系模型,例如实现存储为XML布局,风格描述等。通常这意味着不会有太多数据,速度也不是问题,因此添加了xml特性,如数据验证和操作能力(最后但并非最不重要的是,可以单击值在管理工作室,看到格式化的XML - 我真的很喜欢这个功能!),超出成本。

我没有在数据库中存储大量xml的直接经验,如果我有选项,我不会那样做,因为关系模型几乎总是比较慢,但如果那样做的话案例中,我建议分析这两个选项,并选择最适合您的需求的大小和速度。

+0

我读了理论(即MSDN文章)。任何有关XML数据类型的实际经验?我稍微感到震惊的是,将XML存储为XML数据类型会增加数据库处理器的使用率(请参阅我的原始文章中的链接)。 – FoxyBOA 2009-02-05 06:54:28

+0

您可以给我们一些关于您使用XML时数据库大小减少的声明的详细信息吗?这与测量的FoxyBOA相反。 – 2010-05-21 15:18:27

2

我正在广泛使用xml来与手持设备进行通信,并且我在大多数所有存储过程中都使用XQuery来仅检索我需要的XML中的数据。它的作品非常棒!我只是担心存储空间,因为只有十万条记录,数据库大小为1到2 GB。我们预计会有数百万条用于记录和客户使用的记录。因此,直到我看到它在空间使用方面实际将要做的事情时,这将是令人担忧的。

2

使用XML数据类型存储XML数据很有意义,因为您必须在MS SQL Server中处理UTF8到UTF18,反之亦然。