SQL Server suportă mai multe opțiuni pentru stocarea datelor XML.
Depozitare naturală sub formă de tip xml
Maparea datelor XML și a datelor stocate într-un format relațional
Folosind o schemă adnotată (AXSD), puteți împărți XML în coloane ale unuia sau mai multor tabele. Acest lucru asigură faptul că datele sunt corecte la nivelul relațional. Ca rezultat, structura ierarhică a datelor este păstrată, deși ordinea elementelor nu este luată în considerare. Schema nu poate fi recursivă.
Stocarea obiectelor mari, [n] varchar (max) și varbinary (max)
Se stochează o copie identică a datelor. Acest lucru este util în aplicații speciale, de exemplu, în aplicațiile care procesează documentația legală. Majoritatea aplicațiilor nu au nevoie de o copie exactă a datelor - au un conținut XML suficient (corectitudinea elementelor InfoSet).
De obicei se folosește o combinație a acestor abordări. De exemplu, datele XML pot fi stocate într-o coloană de tip xml. făcând progresul proprietăților sale la nivelul coloanelor relaționale. Alternativ, puteți utiliza tehnologia de cartografiere pentru a stoca fragmente nerecursive în alte coloane decât XML și puteți stoca numai fragmente recursive în coloane de tip xml.
Selectarea tehnologiei XML
Alegerea dintre formatul XML natural și reprezentările XML depinde de obicei de următorii factori.
Uneori, datele XML (de exemplu, un ghid de produs) sunt cele mai bine stocate ca un obiect mare, iar în alte situații - în coloanele relaționale (de exemplu, o descriere a produsului convertit în format XML). Fiecare opțiune de stocare a datelor asigură acuratețea documentului în grade diferite.
Uneori, o opțiune de stocare este mai bună decât alta, ceea ce corespunde naturii și intensității cererilor de date XML. Gradul de suport pentru datele detaliate de interogare XML, cum ar fi estimările predicatelor pentru nodurile XML, este susținut de două tehnologii de stocare în grade diferite.
Este posibil să trebuiască să indexați date XML pentru a accelera procesarea cererilor XML. Posibilitățile de indexare depind de tehnologia de stocare a datelor; Pentru a optimiza volumul de lucru, trebuie să alegeți o opțiune mai potrivită.
Modificări de date
Anumite sarcini de lucru implică o modificare detaliată a datelor XML. Acest lucru poate fi necesar, de exemplu, atunci când adăugați o secțiune nouă unui document, în timp ce nu este necesară rezolvarea altor sarcini, cum ar fi procesarea conținutului web. Pentru dezvoltatorii unei aplicații particulare, limba de modificare a datelor poate fi de mare importanță.
Datele XML pot fi descrise folosind o schemă care poate sau nu să fie un document XML schemă. Suportul pentru datele XML legate de schema depinde de tehnologia XML.
În plus, tehnologia pentru stocarea datelor XML variază în funcție de viteză.
Păstrarea datelor XML în format nativ
Datele XML pot fi stocate pe server într-o coloană de tip xml. Această opțiune este adecvată dacă sunt îndeplinite următoarele condiții:
Aveți nevoie de o modalitate simplă de a stoca date XML pe server, menținând în același timp ordinea și structura documentului;
există posibilitatea ca nu există nicio schemă XML;
Este necesară solicitarea și modificarea datelor XML;
Este necesară indexarea datelor XML pentru procesarea mai rapidă a cererilor;
Trebuie să utilizați vizualizarea catalogului de sistem pentru a gestiona datele XML și schemele XML în aplicația dvs.
Mecanismul de stocare a datelor XML în format natural este util dacă există documente XML cu structuri diferite sau documente XML corespunzătoare schemelor diferite sau complexe care sunt prea dificil de comparat cu structurile relaționale.
Un exemplu. Modelarea datelor XML utilizând tipul de date xml
Să presupunem că avem de-a face cu un ghid de produs în format XML care acoperă o serie de subiecte împărțite în mai multe capitole care includ mai multe secțiuni. O secțiune poate conține subsecțiuni. Astfel, elementul
Pentru stocarea acestor documente XML, coloana de tip xml se apropie perfect. Aceasta vă permite să salvați conținutul InfoSet al datelor XML. Indexarea unei coloane XML vă permite să îmbunătățiți eficiența procesării interogării.
Un exemplu. Salvarea copiilor exacte ale datelor XML
Când procesați cererile în timpul rulării, convertiți datele într-un tip xml și executați o interogare XQuery pentru aceasta. Conversia de tip în timpul execuției poate fi asociată cu o pierdere semnificativă de resurse, mai ales dacă documentul este mare. La o frecvență ridicată a interogărilor, documentele pot fi stocate suplimentar într-o coloană tip xml și indexate exact de ea, iar coloana [n] varchar (max) poate fi utilizată pentru a returna copii exacte ale documentului.
O coloană XML poate fi o coloană care este calculată din coloana [n] varchar (max). Cu toate acestea, pentru o coloană XML calculată, precum și pentru coloane de tipuri [n] varchar (max) sau varbinary (max), nu puteți crea un index XML.
Tehnologia de reprezentare XML
Prin definirea corespondenței dintre schemele XML și tabelele bazei de date, puteți crea o reprezentare "XML" a datelor stocate. Pentru a umple tabelele de bază cu o reprezentare XML, puteți utiliza operația de încărcare în bloc a datelor XML. Puteți interoga date XML utilizând XPath versiunea 1.0 și interogarea este convertită în tabele de interogări SQL. Actualizările se aplică și în cazul acestor tabele.
Această tehnologie este utilă în următoarele situații:
Este necesară implementarea unui model de programare orientat pe XML, folosind reprezentări XML ale datelor relaționale existente;
Există o schemă XSD sau o schemă XDR pentru datele XML care ar fi putut fi furnizate de o organizație parteneră externă;
ordinea datelor nu este importantă, datele din tabele nu sunt recursive sau adâncimea maximă a recursivității nu este cunoscută în avans;
Este necesară solicitarea și modificarea datelor printr-o reprezentare XML utilizând XPath versiunea 1.0;
trebuie să încărcați în bloc informațiile XML și să le distribuiți între tabelele de bază utilizând o reprezentare XML.
Exemple de date care îndeplinesc aceste condiții pot fi datele relaționale furnizate serviciilor Web și facilităților de schimb de date sub formă de XML, precum și date XML cu o schemă fixă. Pentru mai multe informații, consultați biblioteca MSDN Online.
Un exemplu. Modelarea datelor utilizând o schemă XML adnotată (AXSD)
Să presupunem că există date relaționale (de exemplu, informații despre clienți, comenzi și produse) pe care doriți să le procesați ca XML. În acest caz, determinați reprezentarea XML aplicând schema AXSD la datele relaționale. Vizualizarea XML vă permite să încărcați în bloc date XML în tabele și să interogați și să actualizați date relaționale. Acest model este deosebit de eficient dacă doriți să faceți schimb de date care conțin marcaj XML cu alte aplicații fără a suspenda aplicațiile SQL.
Model combinat
Destul de des, o combinație de coloane relaționale și coloane xml este cea mai bună pentru modelarea datelor. Unele valori ale datelor XML pot fi stocate în coloane relaționale, iar restul sau toate valorile XML din coloana XML. Acest lucru poate duce la creșterea performanței printr-un control mai bun al indiciilor create pentru coloanele relaționale și a parametrilor de blocare.
Valorile care ar trebui să fie stocate în coloanele relaționale depind de volumul de lucru. De exemplu, dacă extrageți toate valorile XML utilizând expresia de cale / Client / @ CustId, atunci prin mutarea valorii atributului CustId în coloana de referință și indexarea acesteia, puteți accelera procesarea interogărilor. Pe de altă parte, dacă datele XML sunt supra-distribuite între coloanele relaționale fără dublare, compilarea datelor într-un întreg coerent poate fi prea costisitoare.
În cazul datelor XML foarte structurate, cum ar fi conținutul de tabele convertit în XML, puteți să mutați toate valorile în coloane relaționale și, eventual, să utilizați tehnologia de reprezentare XML.
Granularitatea datelor XML stocate în coloana XML este foarte importantă pentru încuietori și, într-o măsură mai mică, pentru actualizări. În SQL Server, pentru date XML și alte date decât XML, se utilizează aceleași mecanisme de blocare. Astfel, dacă blocați la nivelul rândului, toate instanțele XML de pe linie sunt blocate. Dacă granularitatea este mare, blocarea instanțelor mari de XML pentru a efectua actualizări reduce performanța sistemului într-un mediu multi-utilizator. Pe de altă parte, cu descompunere excesivă, se pierde încapsularea obiectelor și costurile generale asociate creșterii datei de creare a datelor.
Pentru a crea un sistem eficient, trebuie să găsiți un echilibru între cerințele pentru modelarea datelor și caracteristicile blocărilor și actualizărilor. Cu toate acestea, în SQL Server, dimensiunea instanțelor XML stocate nu este atât de importantă.
De exemplu, actualizările unei instanțe XML sunt efectuate utilizând o metodă nouă pentru parțial răcirea bloburilor mari (BLOBs) și a indexurilor, în care o instanță XML stocată existentă este comparată cu versiunea actualizată. Atunci când un binar mare este parțial actualizat, se efectuează o comparație XML cu două instanțe și se actualizează numai datele diferite. Când indexul este parțial actualizat, numai acele linii de index XML care necesită această modificare.