Сочетание ленивой и строгой семантики
Все запросы к базам данных обладают одной общей чертой: они обычно оперируют большими объемами данных, даже если размеры результатов являются небольшими. Поэтому процессоры запросов должны эффективно обрабатывать огромные промежуточные наборы данных. В реляционных СУБД была разработана модель итеративного исполнения запросов, позволяющая избежать излишней материализации данных. По причине общности подхода, модель можно применять и для других моделей данных. В [] была предложена адаптация итеративной модели для исполнения XQuery -запросов.
Принимая во внимание функциональную природу языка XQuery , можно относиться к итеративной модели, как к реализации ленивой ( lazy ) семантики. Если же относиться к XQuery и как к языку программирования общего назначения, который может применяться для выражения логики приложений, реализация только ленивой семантики может отрицательно сказаться на общей эффективности исполнителя. Для обеспечения реализации XQuery , достаточно эффективной при обработке и запросов, и логики приложений, в исполнителе СУБД Sedna сочетаются две модели исполнения.
В исполнителе XQuery отслеживается объем обрабатываемых данных, и может происходить автоматическое переключение из ленивого режима исполнения в строгий ( strict ) режим (и наоборот) во время исполнения. Исполнение запроса в соответствии с имеющимся планом запроса начинается в ленивом режиме. Накладные расходы ленивой модели сильно коррелируют с числом вызовов функций, производимых в процессе исполнения. Чем больше выполняется вызовов функций, тем больше производится копий тел этих функций. Цель применяемого подхода состоит в нахождении компромисса между копированием тел функций и материализацией результатов вызовов функций. В разработанном механизме каждый вызов функции побуждает к переключению на строгую модель, если размеры аргументов относительно невелики. И наоборот, наличие большой входной последовательности любой физической операции является поводом для выполнения этой операции в ленивом режиме.