Notas del Terrible
Заметки Ужасного Зануды

XML в SQL Server

декабря 8, 2009 12:26 by terR0Q

Довелось поработать с XML в SQL Server 2005, впечатления отличные.

Во-первых, это быстро. Во-вторых, это гибко. Использовать стоит только для сильно динамичных данных, когда нужно обрабатывать, например, нестабильный набор свойств. Очень много подробной информации есть на MSDN.

Теперь про технические подробности. Если XML-поле не будет часто использоваться, то можно просто добавить в таблицу столбец типа XML и особо дальше на заморачиваться. Хотя при этом не все возможности XQuery в запросах будут применимы: часто требуется указание точного типа данных, что делается именно схемой. А если поле будет выбираться почти постоянно, надо не только его индексировать (create primary xml index on), но и создать на сервере схему, к которой привязать столбец.

Разница в скорости работы запросов получается, грубо говоря, трехкратная. Без схемы и индекса один мой тест показывал 30 мс, со схемой и индексом - 8 мс. Без схемы, но с индексом было порядка 16 мс. При значительном росте данных, в 30 раз, скорость обработки уменьшилась только в 10 раз, но я проводил тесты при порядке чисел в десятки тысяч, но не миллионов. Была возможность сравнить скорость с аналогичной логикой работы для обычных столбцов, и разница была в районе 30% - это цена динамики и возможности использовать XQuery в запросах.

Для создания схемы используется простая операция добавления схемы с глобальным именем в рамках базы (схемы попадают в Programmability \ Types \ XML Schema Collections):

create xml schema collection some_Usable_Schema as
'<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="YetAnotherList">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="Item">
          <xs:complexType>
            <xs:attribute name="Type" type="xs:int" use="required" />
            <xs:attribute name="Count" type="xs:int" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>';

Далее при создании столбца после указания типа (XML) в скобках добавляем ссылку на схему:

ColumnName xml (Content имя_схемы)

Подытоживая, могу сказать: использовать очень просто, возможности XML в БД дает огромные, но применение должно быть оправдано, т.к. усложняется разработка и возможно ухудшение производительности (а это обычно надо компенсировать).


Добавить комментарий


(Отображает Gravatar)

  Country flag

biuquote
  • Комментарий
  • Предпросмотр
Loading