SQL Server підтримує кілька варіантів зберігання XML-даних.
Природне зберігання у вигляді типу xml
Зіставлення XML-даних і даних, що зберігаються в реляционном форматі
Використовуючи анотований схему (AXSD), можна розбити XML на стовпці однієї або декількох таблиць. Це забезпечує правильність даних на реляционном рівні. В результаті гарантується збереження ієрархічної структури даних, хоча порядок елементів не враховується. Схема не може бути рекурсивної.
Зберігання великих об'єктів, [n] varchar (max) і varbinary (max)
При цьому зберігається ідентична копія даних. Це корисно в додатках спеціального призначення, наприклад в додатках, що обробляють юридичну документацію. Більшості додатків точна копія даних не потрібна - їм вистачає XML-вмісту (правильності елементів InfoSet).
Зазвичай використовується поєднання цих підходів. Наприклад, XML-дані можна зберегти в стовпці типу xml. виробляючи просування його властивостей до рівня реляційних стовпців. Або ж можна використовувати технологію зіставлення для зберігання нерекурсивних фрагментів в шпальтах, відмінних від XML, а в стовпчиках типу xml зберігати тільки рекурсивні фрагменти.
Вибір XML-технології
Вибір між природним форматом XML і XML-уявленнями зазвичай залежить від наступних факторів.
Іноді XML-дані (наприклад, керівництво по продукції) краще зберігати як великий об'єкт, а в інших ситуаціях - в реляційних шпальтах (наприклад, опис, перетворене в формат XML). Кожен варіант зберігання даних забезпечує точність документа в різному ступені.
Іноді один варіант зберігання даних кращий за інший відповідає природі і інтенсивності запитів XML-даних. Ступінь підтримки деталізованих запитів XML-даних, наприклад оцінки предикатів для XML-вузлів, підтримується двома технологіями зберігання даних в різному ступені.
Можливо, буде потрібно проіндексувати XML-дані, щоб прискорити обробку XML-запитів. Можливості індексування залежать від технології зберігання даних; для оптимізації робочого навантаження потрібно вибрати найбільш підходящий варіант.
Можливості модифікації даних
Деякі види робочого навантаження пов'язані з деталізованою модифікацією XML-даних. Це може вимагатися, наприклад, при додаванні нового розділу в документ, в той час як при вирішенні інших завдань, таких як обробка веб-вмісту, це не потрібно. Для розробників того чи іншого додатка велике значення може мати підтримка мови модифікації даних.
XML-дані можна описати за допомогою схеми, яка може бути, а може і не бути документом XML-схеми. Підтримка пов'язаних зі схемою XML-даних залежить від XML-технології.
Крім того, технології зберігання XML-даних розрізняються по швидкодії.
Зберігання XML-даних у власному форматі
XML-дані можна зберігати на сервері в стовпці типу xml. Цей варіант доречний, якщо виконуються наступні умови:
необхідний простий спосіб зберігання XML-даних на сервері, при цьому потрібно зберегти порядок і структуру документа;
існує ймовірність відсутності схеми XML-даних;
потрібно запитувати і змінювати XML-дані;
потрібно проіндексувати XML-дані для прискорення обробки запитів;
потрібно використовувати в додатку уявлення системного каталогу для управління XML-даними і XML-схемами.
Механізм зберігання XML-даних в природному форматі корисний, якщо є XML-документи, що мають різну структуру, або XML-документи, що відповідають різним або складними схемами, які занадто важко зіставити з реляційними структурами.
Приклад. Моделювання XML-даних з використанням типу даних xml
Припустимо, ми маємо справу з керівництвом по продукції в форматі XML, яке охоплює низку тем, розділених на декілька розділів, які включають по кілька розділів. Розділ може містити підрозділи. Таким чином, елемент
Для зберігання таких XML-документів прекрасно підходить стовпець типу xml. Це дозволяє зберегти InfoSet-вміст XML-даних. Індексування XML-стовпця дозволяє підвищити ефективність обробки запитів.
Приклад. Збереження точних копій XML-даних
При обробці запитів під час виконання перетворіть дані в тип xml і виконайте для них запит XQuery. Перетворення типів в період виконання може бути пов'язано зі значною витратою ресурсів, особливо якщо документ великий. При високій частоті запитів документи можна додатково зберігати в стовпці типу xml і індексувати саме його, а для повернення точних копій документа використовувати стовпець [n] varchar (max).
XML-стовпець може бути стовпцем, який обчислюється на основі стовпця [n] varchar (max). Однак для обчислюваного XML-стовпця, а також для стовпців типів [n] varchar (max) або varbinary (max) не можна створити XML-індекс.
Технологія XML-уявлень
Визначивши відповідність між XML-схемами і таблицями бази даних, можна створити «XML-представлення» збережених даних. Щоб заповнити базові таблиці за допомогою XML-вистави, можна використовувати операцію масової завантаження XML-даних. Запитувати XML-дані можна за допомогою технології XPath версії 1.0, при цьому запит перетворюється в SQL-запити таблиць. Оновлення також поширюються на ці таблиці.
Ця технологія корисна в наступних ситуаціях:
потрібно реалізувати орієнтовану на XML модель програмування, використовуючи XML-представлення існуючих реляційних даних;
є XSD-схема або XDR-схема XML-даних, яку, можливо, надала зовнішня партнерська організація;
порядок даних не важливий, дані таблиць нерекурсівние або максимальна глибина рекурсії не відома заздалегідь;
потрібно запитувати і змінювати дані за допомогою XML-вистави з використанням технології XPath версії 1.0;
потрібно виконувати масову завантаження XML-даних і розподіляти їх між базовими таблицями з використанням XML-вистави.
Прикладами даних, що відповідають цим умовам, можуть служити реляційні дані, що надаються веб-службам і засобів обміну даними в формі XML, а також XML-дані з фіксованою схемою. Додаткові відомості див. У бібліотеці MSDN Online.
Приклад. Моделювання даних з використанням анотованої XML-схеми (AXSD)
Припустимо, що є реляційні дані (наприклад, відомості про замовників, замовленнях і товарах), які потрібно обробляти як XML. Визначте в цьому випадку XML-представлення, застосувавши схему AXSD до реляційних даних. XML-представлення дозволяє виконувати масову завантаження XML-даних в таблиці, а також запитувати і оновлювати реляційні дані. Ця модель особливо ефективна, якщо потрібно обмінюватися даними, які містять XML-розмітку, з іншими додатками без призупинення роботи додатків SQL.
комбінована модель
Досить часто для моделювання даних найкраще підходить комбінація реляційних стовпців і стовпців типу xml. Деякі значення XML-даних можна зберігати в реляційних шпальтах, а решта або всі значення XML - в XML-стовпці. Це може привести до підвищення продуктивності за рахунок більш повного контролю над індексами, створеними для реляційних стовпців, і параметрами блокування.
Значення, які слід зберігати в реляційних шпальтах, залежать від робочого навантаження. Наприклад, якщо витягуються все XML-значення при використанні виразу шляху / Customer / @ CustId, то, виконавши просування значення атрибута CustId до реляційного шпальти і здійснивши його індексацію, можна прискорити обробку запитів. З іншого боку, якщо XML-дані надмірно розподілити по реляційним стовпчиках без дублювання, складання даних в єдине ціле може виявитися занадто дорогим.
У разі високоструктурованих XML-даних, таких як вміст таблиці, перетворене в XML, можна зіставити всі значення з реляційними стовпцями і, можливо, використовувати технологію XML-уявлень.
Гранулярність XML-даних, що зберігаються в XML-стовпці, дуже важлива при блокування і, в меншій мірі, при оновленнях. У SQL Server для XML-даних і даних, відмінних від XML, використовуються однакові механізми блокування. Таким чином, при блокуванні на рівні рядка блокуються всі екземпляри XML в рядку. Якщо гранулярность велика, блокування великих екземплярів XML для виконання оновлень скорочує продуктивність системи в багатокористувацької середовищі. З іншого боку, при надмірній декомпозиції втрачається інкапсуляція об'єкта і зростають накладні витрати, пов'язані з відтворенням даних.
Щоб створити ефективну систему, потрібно досягти балансу між вимогами до моделювання даних і характеристиками блокувань і оновлень. Однак в SQL Server розмір збережених примірників XML має не таке велике значення.
Наприклад, поновлення екземпляра XML виконуються з використанням нового способу часткового оновлення великих двійкових об'єктів (BLOB) і індексів, при якому існуючий зберігається екземпляр XML порівнюється з його оновленою версією. При частковому оновленні великого двійкового об'єкта виконується разностное порівняння двох екземплярів XML і оновлюються тільки дані, що розрізняються. При частковому оновленні індексу змінюються лише ті рядки XML-індексу, які цього вимагають.