Обзор алгоритмов MOLAP

       

Разбиение на классы ячеек


Идея этого алгоритма состоит в том, чтобы вместо хранения всех ячеек куба хранить только классы ячеек с одинаковым значением агрегирующей функции. Если же указать выпуклое разбиение (т.е. если две ячейки

Разбиение на классы ячеек

и

Разбиение на классы ячеек

), достаточно будет хранить только верхние и нижние грани классов, т.к. все ячейки класса можно будет вывести из этих границ.

Однако разбиение только по значению агрегирующей функции разрушает семантику куба (и тем более не выпукло). Покажем это.

Например, рассмотрим еще раз таблицу Продажи из введения (). Получившиеся разбиение изображено на рис. .

Таблица 5.1:

Копия таблицы

Разбиение на классы ячеек

Рис. 5.1:

Разбиение только по значению агрегирующей функции

У нас получается следующая схема (рисунок ).

Рис. 5.2:

Классы при разбиении только по значению агрегирующей функции

Разбиение на классы ячеек

Выбор агрегирующей функции в данном случае не важен, т.к. у нас есть возможность двигаться в обе стороны по отношениям roll-up/drill-down. Например, можно пойти вверх от ячейки (ALL, ALL, ALL) в С2 в ячейку (ALL, книги, ALL) в C5, а потом в (R2, книги, ALL) в С2. Тем самым, нарушается семантика отношений roll-up/drill-down.

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

В первых работах по данному алгоритму в качестве разбиения предлагалось так называемое связанное разбиение, однако оно верно только для монотонных функций (Sum (слагаемые одного знака), Count и пр). Впоследствии было предложено разбиение по покрытию. Поэтому здесь в примерах используется AVG — немонотонная функция.

Будем рассматривать кортежи куба как решетку (CL(r), Cube Lattice над отношением r) с введенным порядком, определенным иерархиями измерений (т.е.

Разбиение на классы ячеек

). Введем определение покрытия для решетки (см [1],[2])

Разбиение на классы ячеек

.

Определение 5.2 Будем говорить, что в частично упорядоченном множестве

Разбиение на классы ячеек

элемент а покрывает элемент b, или b покрывается элементом a (обозначение:

Разбиение на классы ячеек

или

Разбиение на классы ячеек

), если:

  • Разбиение на классы ячеек

  • не существует
    Разбиение на классы ячеек


    , такого, что
    Разбиение на классы ячеек


    Следующая лемма показывает, что отношение покрываемости будет определять частичный порядок на множестве.

    Лемма 1   Если
    Разбиение на классы ячеек


    — конечное частично упорядоченное множество, то
    Разбиение на классы ячеек


    тогда и только тогда, когда
    Разбиение на классы ячеек


    , или когда существует конечная последовательность элементов
    Разбиение на классы ячеек


    такая, что
    Разбиение на классы ячеек


    ,
    Разбиение на классы ячеек


    и
    Разбиение на классы ячеек


    для
    Разбиение на классы ячеек


    . Отношение покрываемости в решетке
    Разбиение на классы ячеек


    будет выглядеть следующим образом:

    Разбиение на классы ячеек


    На диаграмме частично упорядоченного множества
    Разбиение на классы ячеек


    элементы изображаются в виде маленьких кружочков
    Разбиение на классы ячеек


    ; кружки, соответствующие элементам x и у, соединяются прямой линией тогда и только тогда, когда один из них покрывает другой; если x покрывает y, то кружок, соответствующий элементу x, помещается выше кружка, соответствующего элементу y. Отметим, что в диаграмме пересечение двух линий не обозначает элемент. Диаграмма для решетки
    Разбиение на классы ячеек


    изображена на рисунке .

    Рис. 5.3:

    Диаграмма решетки
    Разбиение на классы ячеек


    Разбиение на классы ячеек
    Определение 5.3   Отношение покрытия для решетки куба

    Кортеж
    Разбиение на классы ячеек


    покрывает базовый (фактический) кортеж
    Разбиение на классы ячеек


    , если
    Разбиение на классы ячеек


    . Определение 5.4   Отношение эквивалентности по покрытию

    Определим отношение эквивалентности
    Разбиение на классы ячеек


    как транзитивное и рефлексивное замыкание
    Разбиение на классы ячеек


    , где:

    Разбиение на классы ячеек


    Разбиение на классы ячеек


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

    Рассмотрим тот же пример, только на этот раз разбиение будет вестись по покрытию (рис. ).

    Рис. 5.4:

    Разбиение по покрытию


    Соответствующая решетка по классам показана на рис. .

    Рис. 5.5:

    Классы разбиения по покрытию


    Таким образом, для получившегося куба нам нужно хранить только две ячейки на класс, верхнюю и нижнюю грань. Остальные ячейки выводятся из верхней и нижней грани, т.к. классы разбиения по покрытиям''полны'' в смысле введенного частичного порядка.

    Для Quotient Cube предложено две структуры хранения данных: QC - Tables [12] и QC-Trees [11].

    QC-Table — простая таблица, в которой для каждого класса хранится верхняя и нижняя грань. Предложены алгоритмы создания QC-Table и вставки/удаления классов. Такие таблицы неэффективны по времени обработки запросов, т.к. каждый запрос требует просмотра почти всей таблицы.


    Содержание раздела