pureXML
pureXML — это технология хранения, обработки и запросов XML-данных, реализованная в реляционной системе управления базами данных (СУБД) IBM Db2 (ранее — IBM DB2 Universal Database). В отличие от традиционных подходов, где XML-документы хранятся в виде текстовых строк (CLOB) или разбиваются на реляционные таблицы, pureXML обеспечивает нативное (естественное) хранение XML в иерархическом формате, сохраняя структуру документа, порядок элементов и поддержку пространств имён. Технология была впервые представлена компанией IBM в 2006 году в версии DB2 9 (Viper) и с тех пор является одной из ключевых инноваций в области гибридных (реляционно-иерархических) баз данных.
История
Развитие pureXML связано с ростом популярности XML как формата обмена данными в веб-сервисах, электронном документообороте, финансовой отчётности и научных вычислениях. До середины 2000-х годов СУБД либо хранили XML в виде больших текстовых полей (что замедляло поиск и обновление), либо требовали сложного преобразования в реляционные таблицы (что нарушало иерархию и порядок). IBM, имея многолетний опыт в разработке СУБД (DB2, Informix), решила создать нативное XML-хранилище, интегрированное в реляционное ядро.
Первая реализация — DB2 9 (2006 год) — предложила новый тип данных XML и язык запросов XQuery в дополнение к SQL. В 2007 году вышла версия DB2 9.5 с улучшенной производительностью индексации XML-данных. В 2009 году в DB2 10 появилась поддержка XML Schema для валидации документов при вставке. Последующие версии (DB2 11, Db2 11.5, Db2 12) расширили функциональность: добавлена поддержка JSON (как подмножества XML-модели), улучшена параллельная обработка и интеграция с облачными платформами (IBM Cloud, Amazon RDS для Db2).
Архитектура и принципы работы
Нативное хранение XML
В pureXML XML-документы не преобразуются в реляционные строки и не хранятся как простой текст. Вместо этого СУБД использует внутреннее иерархическое представление, основанное на дереве разбора (parse tree). Каждый элемент, атрибут, текстовый узел и пространство имён сохраняются в виде узлов, связанных родительско-дочерними отношениями. Это позволяет:
- Сохранять порядок элементов (в отличие от реляционных таблиц, где порядок строк не гарантирован).
- Поддерживать произвольную вложенность (до 32 уровней по умолчанию, настраивается).
- Обрабатывать XML-документы без потери структуры (например, CDATA-секции, комментарии, инструкции обработки).
Физически данные хранятся в специальных страницах (XML-страницах), отделённых от реляционных данных, но в рамках одного табличного пространства. Для каждого XML-документа создаётся уникальный идентификатор (XMLID), а сам документ разбивается на узлы, которые сжимаются для экономии места.
Индексация XML
Для ускорения запросов pureXML поддерживает несколько типов индексов:
- Путевые индексы (path indexes) — индексируют пути к элементам и атрибутам (например,
/root/employee/name). - Значенческие индексы (value indexes) — индексируют значения узлов (например, строки, числа, даты).
- Полнотекстовые индексы (full-text indexes) — для поиска по текстовому содержимому XML-документов (начиная с DB2 9.5).
Индексы создаются с помощью оператора CREATE INDEX с указанием типа XMLPATTERN и пути.
Языки запросов
pureXML поддерживает два основных языка запросов:
- SQL/XML — расширение SQL, позволяющее встраивать XQuery-выражения в SQL-запросы. Пример:
SELECT XMLQUERY('$d/employee/name' PASSING doc AS "d") FROM employees. - XQuery — самостоятельный язык запросов, ориентированный на XML. Пример:
xquery for $e in db2-fn:xmlcolumn('EMPLOYEES.DOC')/employee where $e/salary > 50000 return $e/name.
Оба языка могут использоваться в хранимых процедурах, функциях и триггерах.
Классификация и виды
По способу хранения
pureXML относится к классу гибридных (dual-mode) СУБД, которые одновременно поддерживают реляционную и иерархическую модели данных. В отличие от:
- Чисто реляционных СУБД (Oracle, PostgreSQL, MySQL) — где XML хранится как CLOB или разбивается на таблицы.
- Чисто XML-ориентированных СУБД (eXist-db, BaseX) — которые не поддерживают SQL и реляционные таблицы.
По версиям Db2
- Db2 for Linux, UNIX, Windows (LUW) — основная платформа, где pureXML появилась первой.
- Db2 for z/OS — версия для мейнфреймов IBM Z, поддерживает pureXML с 2008 года (DB2 9 для z/OS).
- Db2 Warehouse — аналитическая версия, где pureXML используется для хранения полуструктурированных данных в озёрах данных.
- Db2 on Cloud — облачная версия, где pureXML доступна как сервис.
Применение
Финансовый сектор
pureXML широко используется в банках и страховых компаниях для хранения и обработки:
- SWIFT-сообщений (финансовые переводы, платежи).
- FpML (Financial products Markup Language) — деривативы и процентные свопы.
- XBRL (eXtensible Business Reporting Language) — финансовая отчётность (например, для Центрального банка РФ).
Электронный документооборот
В системах электронного документооборота (СЭД) pureXML позволяет хранить:
- PDF/A с XML-метаданными.
- EPUB и другие форматы электронных книг.
- XML-схемы и XSLT-преобразования для проверки и конвертации документов.
Научные и медицинские данные
- HL7 v3 (Health Level 7) — стандарт обмена медицинскими данными.
- DICOM (Digital Imaging and Communications in Medicine) — метаданные медицинских изображений.
- GML (Geography Markup Language) — геопространственные данные.
Веб-сервисы и SOA
pureXML используется как бэкенд для SOAP-сервисов, REST-сервисов (с XML-форматом), а также для хранения конфигураций и метаданных в корпоративных сервисных шинах (ESB).
Преимущества и недостатки
Преимущества
- Производительность — нативное хранение XML в 2–5 раз быстрее, чем хранение в CLOB, при выполнении запросов XPath/XQuery.
- Целостность данных — автоматическая проверка XML-схемы при вставке (опционально).
- Гибкость — возможность комбинировать SQL и XQuery в одном запросе.
- Экономия места — сжатие XML-деревьев (до 50% экономии по сравнению с текстовым хранением).
- Интеграция с реляционными данными — можно создавать индексы по XML-значениям и связывать XML-документы с реляционными таблицами.
Недостатки
- Сложность администрирования — требуется понимание как реляционных, так и XML-моделей.
- Ограниченная поддержка JSON — хотя Db2 поддерживает JSON, pureXML не оптимизирована для него (JSON хранится как XML-документ).
- Зависимость от платформы — pureXML доступна только в СУБД IBM Db2, что ограничивает миграцию.
- Высокая стоимость лицензирования — Db2 является коммерческой СУБД с дорогими лицензиями (особенно для z/OS).
Критика
Основные претензии к pureXML связаны с её закрытостью и монополизацией со стороны IBM. Конкуренты (Oracle с XML DB, Microsoft SQL Server с XML-индексами) предлагают схожие функции, но pureXML считается эталонной реализацией нативного хранения. Также отмечается, что pureXML не получила широкого распространения в веб-приложениях (где чаще используют MongoDB или PostgreSQL с JSON), оставаясь нишевым решением для корпоративных систем.
Интересные факты
- Название «pureXML» было введено IBM в 2006 году как торговая марка, подчёркивающая «чистоту» (pure) хранения XML без реляционных искажений.
- В 2007 году pureXML получила награду «Best of Show» на конференции XML 2007.
- В России pureXML используется в Сбербанке (для обработки SWIFT-сообщений), в Федеральном казначействе (для XBRL-отчётности) и в ряде медицинских информационных систем.
Источники
- IBM Db2 Documentation: «pureXML Guide» (IBM Knowledge Center, 2023).
- Nicola, Matthias. «pureXML: A New Way to Manage XML Data in DB2» (IBM DeveloperWorks, 2006).
- Melton, Jim. «Understanding the New XML Features in DB2 9» (IBM Systems Journal, 2007).
- «DB2 9 pureXML: A New Era in XML Data Management» (IBM Redbooks, 2006).
- Статья «Сравнение подходов к хранению XML в СУБД» (журнал «Открытые системы», 2009).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →