Многомерная модель хранилища
Многомерная модель БД появилась довольно давно, однако в силу присущих ей ограничений применение получила лишь в последнее время. При использовании этой модели данные хранятся не в виде плоских таблиц, как в реляционных БД, а в виде гиперкубов - упорядоченных многомерных массивов. То есть многомерное представление данных здесь реализуется физически.
Конечно, такой подход требует большего объема памяти для хранения данных, при его использовании сложно модифицировать структуру данных. Например, добавление еще одного измерения приводит к необходимости полной перестройки гиперкуба. Однако многомерные СУБД обеспечивают более быстрый по сравнению с реляционными системами поиск и чтение данных, избавляют от необходимости многократно соединять таблицы.
Пусть, например, требуется создать хранилище, накапливающее информацию об изменении социально-экономической обстановки в России. Эта обстановка характеризуется многими параметрами, в числе которых: объем промышленного производства, индекс потребительских цен и др. Госкомстат России собирает их значения для различных субъектов Российской Федерации помесячно, поквартально или за год.
В хранилище должны попадать факты вида:
Название параметра в субъекте Российской Федерации в момент времени был равен {значение}.
Например, индекс потребительских цен в городе Москве в декабре 1996 года был равен 1.01%. В рассматриваемом примере каждое значение связано с точкой в трехмерном пространстве (N, S, Т) с измерениями: N— название параметра; S - субъект федерации; Т- момент времени. Число возможных параметров, субъектов РФ, а также рассматриваемых моментов времени конечно, поэтому все возможные значения можно представить в виде гиперкуба (см. рисунок 1).
Рисунок 1. Представление данных в виде гиперкуба:
1 - значение "Параметра М" для "Субъекта РФ 1" в январе 1991 года
Основные понятия многомерной модели - измерение и значение (ячейка).
Измерение - это множество, образующее одну из граней гиперкуба (аналог домена в реляционной модели).
Значения - это подвергаемые анализу количественные или качественные данные, которые находятся в ячейках гиперкуба (см. рис.).
В многомерной модели вводятся следующие основные операции манипулирования измерениями:
· сечение;
· вращение;
· детализация;
· свертка.
При выполнении операции сечения формируется подмножество гиперкуба, в котором значение одного или более измерений фиксировано. Например, если на рисунке 1 зафиксировать значение измерения "Время" равным "январь 1991 года", то мы получим двухмерную таблицу с информацией о значениях всех параметров для всех субъектов РФ в январе 1991 года.
Операция вращения изменяет порядок представления измерений. Она обычно применяется к двухмерным таблицам, обеспечивая представление их в более удобной для восприятия форме. Если в исходной таблице по горизонтали были расположены субъекты РФ, а по вертикали параметры социально-экономической сферы, то после операции вращения параметры будут размещены по горизонтали, а названия субъектов РФ - по вертикали.
Для выполнения операций свертки и детализации должна существовать иерархия значений измерения, то есть некоторая подчиненность одних значений другим. Например, 12 месяцев образуют год, субъекты РФ образуют регионы. При выполнении операции свертки одно из значений измерения заменяется значением более высокого уровня иерархии. Например, аналитик, узнав значения параметров для января 1991 года, желает получить их значения за весь 1991 год. Чтобы это сделать, необходимо выполнить операцию свертки.
Операция детализации - это операция, обратная свертке. Она обеспечивает переход от обобщенных к детализированным данным.
Многомерные СУБД лучше других справляются с задачами выполнения сложных нерегламентированных запросов. Использование многомерной модели данных позволяет резко уменьшить время поиска в ХД, обеспечивая выполнение аналитических запросов в реальном времени.
Однако у многомерных БД имеются серьезные недостатки, сдерживающие их применение. Многомерные СУБД неэффективно по сравнению с реляционными используют память (в многомерной СУБД заранее резервируется место для всех значений, даже если часть из них заведомо будет отсутствовать). Другой недостаток состоит в том, что выбор высокого уровня детализации при реализации гиперкуба может очень сильно увеличить размер многомерной БД.