Блог → Что такое многомерные СУБД и с чем их едят?

Ок, начнём с того, что о многомерных СУБД сейчас пишут и говорят достаточно много. Практически любой средней или крупной фирме нужно анализировать и планировать свою деятельность, и многие быстро понимают, что делать это "ручками" крайне невыгодно. Думающий руководитель начинает задумываться о приобретении нового софта, удобного для наглядного представления аналитической информации. Поскольку многомерные СУБД, в отличие от реляционных, создавались именно для этого, к ним возникает вполне понятный интерес.

Но часто можно встретить такую ситуацию - начальник приходит к своим программистам и говорит что-нибудь вроде: "Так, ребята, вот вам новая СУБД, освойте за месяц, и сделайте мне это, то и вот это...". Программисты садятся за работу: начинают ворошить документацию, разыскивать статьи в Интернете, "ковырять" свежеинсталлированную СУБД. Но бывает, что на уяснение собственно концепции МСУБД у программистов уходит не один день - в документации информации слишком много, и она слишком детализирована. В книгах много ненужных деталей вроде: "Нажмите такую-то кнопку в меню, чтобы...". Статьи же, как правило, либо слишком узко специализированы, либо адресованы скорее начальству, нежели простым программистам. В этой заметке я постараюсь кратко изложить понятия, необходимые программисту, начинающему изучать МСУБД. Надеюсь, это поможет.



Итак, что же вообще такое МСУБД? Как явствует из названия - это всё-таки СУБД, но при этом построенная по иным принципам, нежели обычные СУБД, и используемая для других целей. Задачи анализа, прогнозирования, прежде всего - представления информации - вот что определяет технологию МСУБД. В отличие от реляционных СУБД, ориентированных на хранение информации и обработку транзакций.

Технология OLAP (Online Analytical Processing, или "оперативный анализ данных") - это и есть то, на чём основываются многомерные СУБД. Часто эти термины используют как синонимы, в основном из-за расплывчатости самого термина МСУБД. При этом термин OLAP более конкретен, он подразумевает многомерное представление данных и технологию работы с этим представлением, т.е. организацию запросов, методы доступа к данным и пр.

Нужно понимать, что многомерное представление данных не обязательно подразумевает многомерное хранение. Данные могут храниться и в реляционных таблицах. Этот вариант получил название "реляционный OLAP" или ROLAP. Системы на основе ROLAP имеют невысокую производительность, а потому используются довольно редко.

А вот MOLAP - тут да, самая настоящая многомерность. Системы, построенные на MOLAP (Multidimensional, т.е. "многомерный" OLAP) способны обеспечить не только многомерное представление, но и многомерное хранение данных, специализированное под многомерное представление ядро СУБД. В большинстве случаев такое хранение данных дает немалый выигрыш в производительности, так как число операций с данными при запросах минимизировано, и все они встроены в ядро МСУБД. Некоторые продукты (такие как например, Oracle Express) позволяют использовать сразу оба варианта: часть данных можно хранить в многомерном виде в хранилище данных, часть же - в реляционных таблицах другой БД. Иногда такое бывает полезно, в основном - когда нужна связь с существующей реляционной БД.

В умных книжках no OLAP очень часто можно встретить занудный, но тем не менее важный термин - хранилище данных. Вот, например, определение от Билла Инмона, одного из создателей самой концепции OLAP: "Хранилище данных - это предметно-ориентированное, привязанное ко времени и неизменяемое собрание данных для поддержки процесса принятия управляющих решений". Вот так вот, простенько и со вкусом... Между тем, имеется в виду всего лишь структура хранимых объектов МБД и неизменные в ней данные (аналог привычных всем таблиц-справочников).

Но главное, для чего используют OLAP - это DSS (Decisions Support Systems, или "системы поддержки принятия решений"). И в самом деле, зачем может понадобиться наглядность представления и анализа, кроме как для принятия каких-нибудь решений? Для пользователя DSS - это уже готовая система, так или иначе удовлетворяющая его потребностям. Для программиста же DSS - задача, конечный продукт, над которым он неустанно трудится. МСУБД, OLAP, хранилища данных - всё это не более чем средства на пути к созданию DSS.