2009-02-05 11 views
10

Ha più senso (ad eccezione della convalida lato server XML/schema/dtd) archiviare XML in tipo XML anziché testo/varchar/ntext? Non ho intenzione di fare alcuna manipolazione XML sul lato del database.Microsoft SQL Server 2005/2008: tipo di dati XML vs text/varchar

Lo scopo della mia indagine è di ridurre le dimensioni del database. Posso usare XML data type per XML non tipizzato per questo scopo? Quali sono i pro e i contro?

Ho trovato un article related to the topic, ma non sono sicuro che le supposizioni/conclusioni degli autori siano corrette.

risposta

7

La mia indagine rapida dimostra che MS SQL 2005 (Express Edition)

Microsoft SQL Server 2005 - 9.00.3073.00 (Intel X86) 5 ago 2008 12:31:12 Copyright (c) 1988- 2005 Microsoft Corporation Express Edition su Windows NT 6.0 (Build 6000:)

negozio XML con in testa circa il 70% (possibile per una più rapida elaborazione/analisi).

I miei dati prima della conversione: file = 160320, riservato = 178576 KB, i dati = 178.184 KB, index_size = 272 KB, inutilizzato = 120 KB

I miei dati dopo la conversione: righe = 160.320, riservato = 309702 KB , data = 307216 KB, index_size = 1672 KB, non usato = 184 KB

Quindi non ha senso memorizzare dati XML nel tipo di dati XML se non si sta pianificando di utilizzare la tecnologia XML sul lato del database.

+0

Sei sicuro che la dimensione del DB aumenti? È contrario a ciò che ha affermato Saulous. È importante per me dal momento che ho un modulo di registrazione che scrive su un DB e qualcuno del mio team ha proposto di conservare alcuni dettagli del registro in XML. Se DB diminuisse, potrei prendere in considerazione la conversione in XML, ma sicuramente non se le dimensioni del DB aumentano. –

+0

Vedere le figure nel mio esempio (confrontare il valore dei dati prima e dopo la conversione). Nel mio caso la dimensione del DB è stata aumentata a 1,7 volte. – FoxyBOA

7

Se memorizzi xml in una colonna digitata xml, i dati non verranno memorizzati come testo semplice, come nel caso di nvarchar, sarà archiviato in una sorta di albero di dati analizzato, che a sua volta sarà più piccolo del versione xml non analizzata. Ciò non solo riduce la dimensione del database, ma offre altri vantaggi, come la convalida, la facile manipolazione, ecc. (Anche se non stai usando nessuno di questi, sono comunque disponibili per un uso futuro).

D'altro canto, il server dovrà analizzare i dati al momento dell'inserimento, il che probabilmente rallenterà il database - è necessario prendere una decisione sulla velocità rispetto alle dimensioni.

Edit:

Personalmente, penso che i dati presenti nel database devono essere immagazzinati come XML solo quando ha una struttura che è difficile da implementare in un modello relazionale, ad esempio, layout, descrizioni di stile ecc. In genere ciò significa che non ci saranno molti dati e la velocità non è un problema, quindi sono state aggiunte funzionalità xml, come la convalida dei dati e la capacità di manipolazione (anche, non da ultimo, la possibilità di fare clic sul valore in studio di gestione e vedere xml formattato - mi piace molto quella funzione!), superare i costi.

Non ho esperienza diretta nella memorizzazione di grandi quantità di xml nel database e non lo farei se avessi l'opzione, dal momento che è quasi sempre più lento di un modello relazionale, ma se questo fosse il caso, suggerirei profilare entrambe le opzioni e scegliere tra dimensioni e velocità che meglio si adattano alle tue esigenze.

+0

Ho letto la teoria (ad esempio l'articolo MSDN). Qualche esperienza pratica con il tipo di dati XML? Sono un po 'scioccato dal fatto che l'archiviazione di XML come tipo di dati XML abbia aumentato l'utilizzo del processore del database (vedi il link nel mio post originale). – FoxyBOA

+0

Puoi darci qualche altro dettaglio riguardo la tua affermazione che le dimensioni del database sono diminuite quando si utilizza XML? È contrario a FoxyBOA misurato. –

2

Sto utilizzando xml ampiamente per comunicare con dispositivi palmari e sto utilizzando XQuery nella maggior parte dei miei processi memorizzati per recuperare solo i dati dall'XML che mi servono. Funziona GRANDE !! Sono solo preoccupato per lo spazio di archiviazione perché con solo centomila record o così, la dimensione del DB è da 1 a 2 GB.Ci aspettiamo di andare in diretta con milioni di record archiviati per la registrazione e l'utilizzo da parte dei clienti .. quindi sarà preoccupante finché non vedrò cosa farà effettivamente in termini di utilizzo dello spazio.

+0

Sono in un'altra posizione: tutte le mie manipolazioni XML sono eseguite su un lato del server delle applicazioni. Quindi sono libero di scegliere come memorizzare XML in un database (in formato testo o XML). – FoxyBOA

2

Ha senso utilizzare il tipo di dati XML per archiviare dati XML come si ha a che fare con UTF8 a UTF18 e viceversa conversione in MS SQL Server.

Problemi correlati