Векторные системы управления базами данных

7/05/2010
Подписка RSS

векторные базы данных, OLAP, MonetDB
В данном методе рассматривается использование векторных СУБД для анализа больших объёмов данных.

Если Вы читаете эту страницу, то результат работы одной из векторных СУБД налицо: для сайта мы используем инфраструктуру Google Application Engine, которая включает модифицированную (крайне ограниченную по возможностям) СУБД Google BigFoot. Эта высокоскоростная система управления базами данных используется компанией Google для обслуживания своих поисковых машин. Собственно, задача быстрой обработки больших объёмов данных - самое сильное место векторно-ориентированных СУБД. Но... обо всём по порядку.

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

  • выявить статистику по каждому клиенту;
  • составить матрицу (частота заказов-стоимость заказов) для ABC-XYZ анализа клиентов;
  • провести анализ парных предпочтений (affinity analysis) для выявления устойчиво встречающихся пар продуктов в заказах.

У нас не было возможности использовать мощные аппаратные средства для СУБД, только лэптоп с 2 Гб памяти. Для начала было решено воспользоваться СУБД MS Access, но от неё пришлось отказаться. Не удалось даже закачать данные в таблицы. После этого была попытка использовать СУБД sqlite, но она также оказалась безуспешной. MySQL со стандартным движком также был не растороплив. Результаты же требовалось получить крайне быстро.

В попытке решения этой задачи я обратился к векторно-ориентированным базам данных. В упрощённом виде, можно сказать, что они отличаются от реляционных СУБД тем, что в них данные хранятся не как строки в таблице, а как колонки. Такая компоновка требует больше памяти и времени на изменения данных, но позволяет быстрее организовывать доступ к данным. На текущий момент существует несколько поставщиков векторных СУБД. Более того, в последних версиях MySQL имеется интегрированное векторное хранилище (InfoBright).

На момент реализации проекта, в распоряжении был крайне короткий список доступных открытых векторных СУБД. Из имеющихся альтернатив была выбрана система MonetDB. Основным критерием выбора оказалась наличие jdbc-драйвера, поддержка SQL и способность системы использовать текстовые файлы в качестве источника данных без какой-либо обработки. Надо сказать, это потребовало больших объёмов оперативной памяти и система периодически аварийно завершала работу. Нам пришлось дробить данные по полугодьям (более 1 Гб на файл). Тем не менее, в отличие от реляционных систем, скорость обработки составляла доли секунды. Справедливости ради, нужно сказать, что значительную часть времени пришлось уделить экспериментам, т.к. документация системы на момент работы с ней, была не самого лучшего качества. Работа по анализу была выполнена практически в срок. В частности, благодаря анализу парных предпочтений мы с улыбкой узнали, что наиболее часто встречающейся парой продуктов в заказах являются "ржаной хлеб" и "пшеничный батон".

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

Можно предположить, что в ближайшие 10 лет технологии, лежащие в области векторных СУБД, получат более широкое применение. В первую очередь это будут приложения OLAP (on-line analytical processing), витрины данных, ГИС (геоинформационные системы) и системы автоматизированной обработки текстов.