Реализация поддержки XML и XQuery в Microsoft SQL Server 2005 Евгений Коган Technical Lead SQL Server Engine Microsoft Corp Содержание XML и реляционные данные. Зачем вместе? Краткий обзор XML в Microsoft SQL Server 2000 Серверные средства поддержки XML в Microsoft SQL Server 2005 XML – встроенный тип Поддержка XML Schema Запросы к XML c XQuery и модификация XML Индексирование XML FOR XML – средство публикации XML Разбор XML с помощью nodes() XML Самодостаточен – содержит данные и метаданные: <Документ id="d1"> Это <пример>XML документ</пример>. </Документ> Может содержать данные сложной структуры Деревья, рекурсия, графы Структурированные данные: повторяющиеся однородные структуры Полуструктурированные данные: разнородные структуры, нерегулярные и редкие данные Данные с разметкой тэгами Гарантирует порядок данных Отношения между данными выражаются Как "содержится в" / "включено в" Атрибутами-ссылками на элементы – при наличии схемы Реляционные данные Табличные данные с жесткой схемой Метаданные (схема) и данные хранятся отдельно: CREATE TABLE T (name nvarchar(50), age int) INSERT INTO T(name, age) VALUES ('Zaphod', 42) Полностью структурированы: повторяющиеся однородные структуры Связи между данными описываются через Целостность ссылок - внешний ключ Запросы и представления Хорошо поддерживают свободное связывание данных в зависимости от целей приложений Сценарии использования XML Транспорт данных/обмен данными Business-to-business (B2B), business-to-consumer (B2C), application-to-application (A2A) XML как формат обмена данными повсеместно распространен, расширяем и платформно-независим. Управление хранением документов Office XML Documents, XHTML Разделение хранения и презентации данных: XML документы и транформации (XSLT) к ним Обмен сообщениями - Simple Object Access Protocol (SOAP) Обработка данных в среднем ярусе между сервером и клиентом XML-документы для индивидуальных сценариев часто это хранение объектов с редкими полями или со множеством значений, которые не так хорошо моделируются в реляционных схемах →Транспортировка, Хранение и Выборка XML SQL Server – интегрированная платформа для данных Базовые возможности БД распостраняются и на XML и на реляционные данные: Базовые возможности Одновременный доступ к данным Восстановление данных Декларативные языки запросов и модификации Среда выполнения БД и Оптимизатор Триггеры, репликация, ограничение доступа, Bulk Load Инструментальные средства управления данными Интеграция с инструментами Business Intelligence Выбор между XML и реляционными данными XML Реляционные Табличные и структурированные Иерархические и структурированные Полу-структурированные Данные с тэгами Только через PK-FK с каскадным удалением Нет специального типа С фиксированным порядком Рекурсивные Характер Данных Нет специального типа, полнотекстовый поиск Нет специального типа (С рекурсивными запросами) XML и реляционные данные вместе! Сценарий Обмен данными Управление документами XML Реляционные Транспортировка, преобразование в реляционные Естественное хранение данных с разметкой Хранение и выборка по запросам Ссылочная целостность и полнотекстовый поиск Полуструктурированные данные Подотчетные сообщения/формы Содержит полуСодержит структурированную структурированную часть часть Естественное хранение Запросы по извлеченным полям Хранение сложных объектов Естественное хранение Запросы по извлеченным полям Архитектура XML в SQL Server 2005 Relational XML XML XML Parser XML Schemata Schema Collection Validation OpenXML/nodes() modify() XML data type (binary XML) query() Node PRIMARY Table XML with XMLFOR INDEX TYPE directive PATH Rowsets Index PROP Index VALUE Index демо XML как новый тип данных и XML Schema Тип Данных XML Новый тип данных SQL Для колонок, переменных и параметров Может содержать: Документы XML 1.0 Фрагменты XML 1.0 (0 - n элементов и текстовых нодов на верхнем уровне) Может связываться с XML Schema collection Запросы через XQuery Модификация через XML-DML Возможно индексирование XML Проверка на корректность и соотвествие XML Schema Тип Данных XML Хранение Основной формат LOB (2 GB на копию) Оптимизированный двоичный формат: Цель: быстрый разбор и сериализация В среднем 20% сжатие по сравнению с UTF-16 Строковые данные в UTF-16 Индексирование (для ускорения запросов) Первичный и Вторичные XML индексы Первичный: 2-4X от размера XML Индекс для PATH : 0.5 от размера XML Преобразование (CAST) в/из varbinary, (n)varchar и CLR UDT Поддержка XML Schema XML Schema – стандарт World Wide Web Consortium [W3C] Богатые возможности для определения типов и ограничений (validation constraints) Может связываться с XML документами Преимущества типизации XML Гарантия корректности Дополнительная оптимизация хранения и запросов XML Schema хранится как метаданные SQL в специальном формате Совместная обработка SQL и XQuery SELECT x.query(‘…’), y FROM T WHERE … Static Phase Metadata SQL Parser XQuery Parser Static Typing Static Typing Algebrization Algebrization XML Schema Collection Static Optimization of combined Logical and Physical Operation Tree Dynamic Phase Runtime Optimization and Execution of physical Op Tree XML and rel. Indices демо XQuery и модификация XML Возможности XQuery Статус в W3C: Candidate Recommendation, Recommendation ожидается в 2006 FLWOR: FOR / LET / WHERE / ORDER BY/ RETURN Включает в себя XPath 2.0 (/doc[@id = 123]) Конструкторы XML элементов (<topic>) Операторы, сохраняющие порядок: Порядок XQuery последовательности: FLWR Порядок XML документа: выражения XPath Статическая типизация, строгая типизация c XML Schema, нестрогая – без схемы XQuery в SQL Server 2005 Реализовано подмножество XQuery В соответствии с предварительным проектом XQuery от июля 2004 Добавлена модификация XML Касается одной копии XML – переменной, параметра, ячейки «Вызывается» через методы типа XML: query(), value(), exist(), modify(), nodes() T-SQL используется для итерации по ячейкам с XML в колонке Может ссылаться на реляционные данные (переменные/колонки) Эффективно использует XML Schema collection для типизированного XML Использует XML индексы sql:column()/sql:variable() Отображаeт значение из SQL в XQuery или в XML-DML sql:variable(): доступ к SQL переменным/параметрам declare @value int set @value=42 select * from T where T.x.exist(‘/a/b[@id=sql:variable(“@value”)]’)=1 sql:column(): доступ к колонке SQL tables: T(key int, x xml), S(key int, val int) select * from T join S on T.key=S.key where T.x.exist(‘/a/b[@id=sql:column(“S.val”)]’)=1 Ограничение в SQL Server 2005: Не поддерживается XML, CLR UDT, datetime и text/ntext/image Модификация XML Расширения XQuery по вставке, удалению и модификации XML Ещё не стандартизуется. Модификация ожидается во 2-й версии стандарта. Модификация поддерева XML: Вставка или удаление поддерева Модификация значений Реализовано «частичное замещение» только измененных данных – и в двоичном представлении XML и в XML-индексе Блокируется вся копия XML – row level параллелизм XML-DML: replace delete insert value of Customer notes notes name: xs:string Order notes “Vasya” “Petya” id: xs:int insert replace<notes/> value of delete into /Customer (/Customer/name)[1] /Customer/Order[id = 42] with “Petya” insert <notes/> as last into /Customer insert <notes/> as first into /Customer insert <notes/> before /Customer/name insert <notes/> after /Customer/name 42 Target needs to be statically one node Индексирование XML Создание XML-индекса на колонке типа XML CREATE PRIMARY XML INDEX idx_1 ON docs (xDoc) Индексируются все тэги, значения и целые XML-пути Вторичные XML-индексы отличаются кластеризацией FOR VALUE – ускоряет запросы типа //city[.=“Bellevue”] FOR PATH – Эффективен для выражений, содержащих XMLпути (XPath). Пример: /person/address/zip FOR PROPERTY – для «выборки полей» (“property extraction”); аналогичен FOR PATH, используется оптимизатором в сочетании с другими (не-XML) индексами. Убыстряются XQuery запросы Результаты могут формироваться прямо из индекса SQL запросы со многими XML подзапросами оптимизируются как одно целое Используется мощь стандартного оптимизатора SQL Вновь созданные индексы используются немедленно Полнотекстовый индекс XML filter XML-разметка воспринимается как граница слов Тэги и атрибуты игнорируются Синтаксис – как и для всех остальных типов CREATE FULLTEXT INDEX ON docs (xDoc) Можно комбинировать с XQuery: Сначала full-text index Потом XML-индекс, FOR PROPERTY индекс полезен Полнотекстовый индекс Примеры SELECT R.X.query ('//sec[@num=12]') FROM (SELECT * FROM docs WHERE contains (xDoc, 'Wrd1 Wrd2')) R(X) Поддержка аттрибута xml:lang Использует word breaker для заданного языка SELECT * FROM docs WHERE contains (xDoc, 'Visionen', LANGUAGE 'German') Разбор и публикация XML На сервере: Публикация (форматирование табличных данных как XML): FOR XML Разбор (преобразование XML в табличные данные): nodes() или OpenXML На клиенте: SQLXML 4.0 XML Bulkload ADO.NET DataSet SQL Server Integration Services демо Разбор и публикация XML – FOR XML и nodes() FOR XML и OpenXML Обратная совместимость с SQL Server 2000 FOR XML * Новая директива TYPE – результат типа XML Добавлена поддержка новых типов Присваивание результата FOR XML Вложенный FOR XML (sub-query) Новый режим – PATH PATH + Вложенный FOR XML = замена EXPLICIT WITH XMLNAMESPACES (и для FOR XML и для XQuery) Требуется явное преобразование из CLR UDT в XML Режим RAW с форматированием элементами Вложенная XSD схема для режимов RAW и AUTO NULL как xsi:nil или отсутсвие элемента при элементном форматировании OpenXML Базируется на более новом «движке» MSXML 3.0 Поддержка новых типов: [n]varchar(max), varbinary(max), XML XQuery: nodes() Новая альтернатива OpenXML с естественной для типа XML семантикой Производит ряд на каждый узел XML Каждый ряд содержит специальную копию типа XML, которая: Ссылается на отобранный узел Сохраняет первоначальную структуру и типизацию Может использоваться только в методах XQuery (кроме modify()), count(*) и IS (NOT) NULL Резюме SQL Server – интегрированная платформа для оперирования данными; предоставляет базовые сервисы БД и для XML и для реляционных данных Втроенная поддержка XML включает в себя: Встроенный тип XML Проверку по XML Schema Поддержку XQuery Поддержку расширений по модификации XML (XML-DML) XML-индексы Улучшенные публикация и разбор XML Что не вошло? Подробнее про XQuery, система типов Демо по индексации XML Максимизация производительности XQuery Доступ к XML на стороне клиента и из серверного CLR Читайте XML Whitepapers; (ссылка дальше) Ресурсы по XML в SQL Server Русскоязычные: http://www.sql.ru/forum/actualtopics.aspx?bid=1 SQL Server webpage: http://msdn.microsoft.com/SQL/ TechNet learning resources: http://www.microsoft.com/technet/prodtechnol/sql/2005/learning/default.mspx Особо рекомендую XML and Databases whitepapers: http://msdn.microsoft.com/XML/BuildingXML/XMLandDatabase/ Online WebCasts: http://msdn.microsoft.com/sql/2005/2005webcasts/ Newsgroups & Forum: microsoft.public.sqlserver.xml http://www.microsoft.com/technet/community/newsgroups/dgbrowser/enus/default.mspx?dg=microsoft.public.sqlserver.xml&lang=en&cr=US http://forums.microsoft.com/msdn/ShowForum.aspx? ForumID=89 Мой E-mail: Eugene.Kogan@microsoft.com Научные публикации по реализации XML в SQL Server 2005 Indexing XML Data Stored in a Relational Database (VLDB 2004) http://www.vldb.org/conf/2004/IND5P2.PDF ORDPATHs: Insert-Friendly XML Node Labels (SIGMOD 2004) http://www.cs.umb.edu/~poneil/ordpath.pdf XQuery Implementation in a Relational Database System (VLDB 2005) http://www.vldb2005.org/program/paper/thu/p1175-pal.pdf Optimizing Runtime XML Processing in Relational Databases (XSym-2005) – http://springerlink.metapress.com/media/hpb9jdhack6twhae2bt7/contributions/2/ y/g/n/2ygncbbv2ukfk8vb.pdf Вопросы? Ask the Expert В течение часа после доклада я буду присутствовать на стенде “Спроси эксперта” © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.