Назад в библиотеку

СУБД для анализа Больших Данных

Автор: Кирилл Вахрамеев
Источник: издательство «Открытые системы» , № 10, 2011

Аннотация

Кирилл Вахрамеев СУБД для анализа Больших Данных. Виртуализация изменила ИТ, за исключением сегмента высоконагруженных приложений и серверов больших баз данных, однако сегодня и здесь, благодаря таким решениям, как HP Vertica, наступает время революционных изменений, но совершенно иного плана.

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

Большие Данные (Big Data) — это совокупность структурированных и неструктурированных, постоянно растущих данных, а также методов, инструментов и методов их обработки в распределенной сети с учетом многообразия форматов и источников данных. Целью обработки является получение понятных человеку результатов, обобщающих поведение изучаемых объектов и позволяющих его прогнозировать. Ключевой момент здесь — непрерывное поступление новых данных, но аналитики, как правило, не любят, когда данные меняются во время выполнения запроса, поскольку изменения могут исказить результат. Значит, надо уметь анализировать их «мгновенно», за время, сравнимое со временем их поступления.

Было бы неверно характеризовать Большие Данные лишь объемом как таковым, поскольку любой фиксированный объем хранения, скажем 100 Гбайт, позавчера казался велик, сегодня помещается в мобильном устройстве, а послезавтра его не хватит и на один фрагмент семейной хроники. Большие Данные — типичный пример перехода количества в качество. Это не количество байтов, а, по аналогии с Большой Водой или Большой Нефтью, такой объем, который трудно хранить и обрабатывать традиционными способами, причем в реальном времени.

Зачем собирать и обрабатывать?

О том, зачем нужна бизнес-аналитика как таковая, написано много – общее состоит в том, что она необходима для снижения рисков принятия ошибочных решений в быстро меняющемся мире. Важно знать, где аналитик встретится с Большими Данными, — сегодня, как правило, это комплексы, отслеживающие состояние и тренды поведения рукотворных и нерукотворных больших, взаимосвязанных стохастических систем.

Практически во всех перечисленных системах используются технологические датчики, генерирующие массу данных, сбор, хранение и анализ которых может оказаться весьма сложным в силу их больших объемов и/или скорости поступления.

Чем обрабатывать?

Майкл Стоунбрейкер в статье «Один размер пригоден для всех»: идея, время которой пришло и ушло» обращает внимание на то, что специализированные СУБД могут работать на два порядка быстрее универсальных, поэтому для каждого класса задач, вообще говоря, должна быть своя система, причем количество ее настроек должно быть минимальным (в универсальной системе множество настроек оправданно, а в специализированной все должно быть максимально оптимизировано на уровне кода). Многие из своих идей Стоунбрейкер проверил на практике, создавая стартапы, часть которых была впоследствии успешно продана. Одна из таких компаний — Vertica, выпускающая одноименную СУБД, специально предназначенную для решения аналитических задач в реальном времени. С сегодня эта компания вошла в состав HP.

Прототипом Vertica была экспериментальная СУБД C-Store, получившая свое название от метода хранения по колонкам. Продвигая Vertica на рынок, маркетологи обыграли четыре буквы C (в русском варианте «К»): Columns storage (хранение по колонкам), Compression (компрессия данных), Clustering (кластеризация) и Continuous performance (круглосуточная непрерывная работа 24х7х365).

Рисунок 1 – Кластеризация СУБД Vertica с дублированием (К=1)

Рисунки 1 – Кластеризация СУБД Vertica с дублированием (К=1)

Как быть с загрузкой?

Согласно определению Больших Данных, нельзя прерывать работу по выполнению запросов на загрузку данных — идет непрерывный поток, а бизнес часто требует от аналитика отчет «уже вчера», поэтому времени на остановку для загрузки данных нет. В СУБД Vertica предусмотрен специальный механизм непрерывной загрузки данных без снижения скорости их чтения. Во-первых, чтение происходит в режиме snapshot isolation mode (изоляции мгновенного снимка), при котором читается последняя целостная копия данных, не зависящая от текущих вставок и удалений, поэтому блокировки базы данных на запись не требуется. Во-вторых, запись ведется в специальную область WOS (Write Only Store) в оперативной памяти, а чтение происходит с дисков — из области хранения типа ROS (Read Only Store), где обычно лежат данные (рис. 2), причем WOS не сортируется и не индексируется. Перенос записей из WOS в отсортированную ROS происходит большими блоками, автоматически и асинхронно с помощью специального процесса перемещения записей Tuple Mover. Так как этот процесс оперирует целиком всей WOS, то перемещение записей может быть очень эффективным, с одновременной сортировкой многих записей и сбросом их на диск в пакетном режиме. Обратной стороной этого механизма является практическая невозможность использования СУБД Vertica в качестве транзакционной, поскольку она оптимизирована для выполнения произвольных запросов и запросов, связанных с оперативной аналитической обработкой (OnLine Analytical Processing, OLAP), и для ее эффективной работы операции UPDATE и DELETE не должны превышать 1% общего числа операций. Следующим детищем Стоунбрейкера будет СУБД, оптимизированная специально для оперативной обработки транзакций (OnLine Transaction Processing, OLTP).

Рисунок 2 – Непрерывная загрузка в СУБД Vertica

Рисунки 2 – Непрерывная загрузка в СУБД Vertica

Чем больше проекций, копий и чем выше значение K, тем больше ресурсов нужно для выполнения процедуры загрузки, поэтому параметр K не должен быть слишком велик — обычно используются значения 1 или 2. В таком режиме Vertica эффективно справляется с загрузкой при одновременном выполнении аналитических запросов, которые обрабатываются в 10-1000 раз быстрее, чем у «обычной», строковой СУБД на одном и том же оборудовании.

Для оптимизации работы можно перестраивать базу данных на ходу с помощью утилиты Vertica Database Designer, предназначенной также для выработки рекомендаций, обеспечивающих качественное выполнение типичных SQL-запросов, при разработке баз данных. Администратор баз данных, конечно, может изменить любые рекомендованные параметры, но во многих случаях эта утилита самостоятельно оптимизирует производительность, что сокращает время настройки.

Где берут аналитические приложения?

СУБД Vertica снабжена стандартным SQL-интерфейсом (ANSI SQL-99), имеющим расширения для работы с аналитическими запросами, при этом сжатие данных, хранение по колонкам и сегментирование таблиц конечному пользователю не видны. Обеспечивается совместимость с механизмами очистки данных, составления отчетности и бизнес-аналитики от Cognos, Informatica, Business Objects и SAS. Все это облегчает перенос уже накопленных баз данных, а также использование других аналитических приложений, имеющих стандартный SQL-интерфейс, коннекторы ODBC, JDBC или ADO.NET. Существующее аналитическое ПО (например, продукты SAS) можно подключать к СУБД Vertica, хотя специально разработанное ПО может быть эффективнее.

Предусмотрена бесплатная версия Vertica Community Edition, позволяющая разработчикам и аналитикам создавать собственные приложения и обмениваться опытом с сообществом пользователей Vertica. Данная редакция включает инструментарий разработчика для описания и выполнения аналитических запросов, позволяющий использовать аналитическую библиотеку внутри СУБД, а также обеспечивает встроенную поддержку для ряда функций: поиск серий событий по шаблону, объединение серий событий, линейная регрессия и т.д. Vertica Community Edition включает все свойства полной версии, но ограничена по масштабируемости — до 1 Тбайт данных и трех машин в кластере, что, однако, позволяет строить реальные системы для небольших компаний или отделов.

Виртуализация, облака и Vertica

Поскольку аналитическая СУБД Vertica изначально предназначена для работы в горизонтально масштабируемой MPP-среде и лицензируется не по процессорам, а по объему обрабатываемых данных, то ее легко помещать в облачные среды, например VMware vSphere или Amazon Elastic Compute Cloud. Преимуществом виртуализованной среды является быстрота развертывания, так как все узлы в комплексе Vertica одинаковы, а готовый образ виртуальной машины зарегистрированный пользователь может скачать с сайта. Виртуализованный, или облачный, вариант рекомендуется использовать для экспериментальных и непродолжительных аналитических проектов, а также предоставления аналитических сервисов в режиме SaaS пользователям одного облака.

Для работы с Большими Данными рекомендуется выделять для СУБД Vertica отдельное оборудование, хотя в случае публичных облаков это может быть услуга типа PaaS (платформа как сервис), а в случае частных самым простым путем будет приобретение Vertica Appliance с предустановленным ПО и сконфигурированным аппаратным комплексом. Выбрав одну из базовых моделей на 5, 10, 20 или 50 Тбайт, в дальнейшем можно наращивать ее емкость и производительность.

Кирилл Вахрамеев (kirill.vakhrameev@hp.com) – cпециалист по бизнес-критичным решениям компании HP, OpenVMS Ambassador (Москва).