среда, 15 августа 2007 г.

Недоделанный стандарт XQuery

Source: http://www.itblogs.ru/blogs/borkus/archive/2007/08/15/_1D04350434043E04340435043B0430043D043D044B043904_-_4104420430043D043404300440044204_-XQuery.aspx

Прочитал на неделе IBM Red Book, посвященный работе с XML в СУБД DB2. Хотя качество этих книг в последнее время падает -- их пишут коллективы авторов, редактура слабая, что приводит к большому числу повторов, -- эти книги все еще интересны и познавательны.

DB2, как известно, очень хорошая СУБД. Я в нее «влюбился» еще лет десять назад просто за программы инсталляции и администрирования -- все было настолько удобно по сравнению с Oracle DB, что использовать Oracle больше не хотелось.

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

Пару лет назад в нее, также с некоторым опозданием, добавили поддержку XML.

Вокруг XML-СУБД было много шума в свое время, так как они существенно снижают нагрузку на разработчика приложений. И сейчас еще встречаются статьи на тему «как важно в SOA использовать «родную СУБД», а не гибридную»  и т.п. Но интерес к ним стих, так же, как когда-то спал интерес к объектным базам.

«Чисто» XML базы в существенной степени были вытеснены гибридными решениями на базе традиционных СУБД. Вначале гибриды были совсем примитивными (позволяли только хранить строку XML в поле BLOB), но потом обросли поддержкой специальных XML-полей в таблицах и стандарта XML-запросов Xquery.

По этому пути пошла и DB2. Она позволяет смешивать в запросах как SQL-поля, так и XQuery-поля, что дает возможность извлекать данные изнури XML-документов. Скажем, если сделать запрос на языке SQL-XML, то  можно делать выборку (SELECT) одновременно по полям таблицы и XML-иерархии, и выдавать результат в виде обычной SQL-таблицы. Или, наоборот, сделать запрос XQuery и получить результат в виде документа XML.

В этих процессах есть тонкости -- можно задавать довольно сложные преобразования данных, можно проверять помещаемый в базу XML на соответствие схемам, строить смешанные виды (с ними нужно быть осторожными, т.к. XML-столбцы не будут индексироваться) -- об этом собственно и книжка.

Но, что интересно, что вся красивая картинка рушится, когда надо записывать данные в XML. Записать можно только целый документ  -- стандарт XQuery 1.0 не поддерживает записи внутрь XML, только извлечение данных. Соответственно, гибридные СУБД предлагают некоторые обходные маневры -- в том числе DB2 имеет специальную хранимую процедуру -- но все равно это уже не стандартно, да и не очень эстетично.

 //Влад Боркус

Published 15 августа 2007 г. 3:15 by Vlad Borkus
Filed under: , ,

Comments




feygin said:Влад, это известный недостаток XQuery в ее нынешнем виде. См. http://www.w3.org/TR/xqupdate/ -- это уже стоит во многих продуктовых планах. Если бы Update Facility была частью основной спецификации, то это сильно задержкало бы ее выход и вполне возможно до сих пор ни в каких DB2 не было бы XQuery вообще.августа 16, 2007 12:21

Комментариев нет:

Отправить комментарий