2009-02-05 90 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,反之亦然。