понедельник, 28 января 2013 г.

Выбор Vertica VS ...

Привет.

Хочу написать в тему, почему мы выбрали Vertica для построения хранилища телекоммуникационной компании и кто еще был рассмотрен в ходе выбора сервера хранилищ данных.

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

Однако, в ходе подготовки требований к проекту построения сетевого хранилища данных, появился ряд требований, которые поставили жирный и окончательный крест на кандидатуре Sybase IQ:
  1. Одновременная загрузка из множества потоков данных. В Sybase IQ существует ограничение на монопольную запись в таблицу, то есть в один момент времени в таблицу может добавлять или изменять данные только одна сессия.
  2. Горизонтальное масштабирование кластера сервера для легкого наращивания мощностей при значительном увеличении потоков загружаемых данных и количества ad-hoc запросов. В данном случае Sybase IQ является SMP сервером(shared-everything), и здесь добавление новых серверов в кластер фактически дает прирост производительности при увеличении числа клиентских сессий, но никак не помогает при увеличении объемов данных. Так же в Sybase IQ для ускорения к доступу к данным используются индексы, которые он не умеет партиционировать, в отличие от самих данных. Это означает, что при значительных количествах записей в таблице, индексы такой таблицы будут расти в размерах, все более замедляя операции вставки данных и выполнение запросов над таблицей. Что потом и было нами обнаружено при тестовых испытаниях Sybase IQ.
В итоге перед нашим проектом стала старая как мир дилемма - какой СУБД нужно использовать. Второе требование перечеркивало использование SMP серверов и намекало, что нужно смотреть на MPP архитектуру. Такие монстры MPP, как Teradata или Exadata по своей стоимости не вписывались в бюджет проекта, поэтому, засучив рукава, мы стали искать и смотреть, что же есть в мире MPP DWH. В итоге определилось три кандидата:
  • HP Vertica, декларирующий принцип "чем проще, тем лучше"
  • IBM Netezza с чисто ай-би-эмовским подходом "купил ящик и не паришь мозг"
  • EMC GreenPlum с лозунгом "мы лучше всех, потому что у нас есть все"
В Vertica сразу подкупила архитектура сервера. Это наверное самый молодой из существующих и самый современный сервер хранилищ данных, так как при его разработке учитывались грабли всех существующих серверов. С учетом того, что руководит разработкой Stonebraker, сразу было понятно, что это должен быть серьезный продукт. И конечно же нас сразу привлекли в Vertica три черты, роднящие этот сервер с Sybase IQ - колоночное хранение и компрессия данных, плюс нулевое администрирование. Потом правда выяснилось, что нулевое администрирование в Vertica не до конца "нулевое" и, в отличие от IQ, пусть небольшое, но администрирование нагрузок сервера требуется. Но это уже тема для другой статьи. Еще в Vertica понравилось отношение к потенциальным клиентам, никакого маркетинга и лапши на уши, американцы сразу же нам дали пробную лицензию, чтобы мы смогли развернуть кластер для тестирования и подключили своих технических специалистов для консультаций, не поленившись, в том числе, изыскать у себя русскоязычных спецов.

Netezza  - черный ящик, который привезли, поставили, и ты начал работать. Удобно, что не нужно думать как настроить и оптимизировать сервер, все уже сделано и оптимально настроено. Приятно, что у IBM в России работают технические специалисты высочайшего уровня, которые много знают и охотно делятся информацией. Порадовало то, что при общении с нами маркетинга было меньше, чем технических консультаций, IBM было серьезно настроено на то, чтобы продать нам продукт, который мы смогли бы успешно запустить, и долго и счастливо на нем работать. С учетом того, что в стоимость такого ящика закладывается цена железа, а не ПО, подход верный - продавец кровно заинтересован, чтобы у нас все запустилось. При росте объема данных, мы гарантировано будем менять ящики на более мощные, то есть станем постоянными покупателями.

EMC GreenPlum очень серьезно подошел к рекламе своего продукта и приложил все силы, чтобы убедить нас, что их продукт лучший. Были привлечены специалисты и интеграторы, которые с готовностью отвечали на все наши вопросы и проводили личные встречи и консультации. Помимо интеграторов, нам дали возможность пообщаться с клиентами, у которых уже работали проекты на GreenPlum. Российское отделение GreenPlumn даже смогло организовать нам личную встречу с техническим директором GreenPlum Люком Лонерганом, который с любезностью поделился с нами информацией по поводу будущего развития этого продукта и ответил на наши вопросы. Все указывало на то, что GreenPlum очень хочет войти в рынок Телекоммуникаций РФ и готов приложить к этому максимум усилий. На выходе мы сделали для себя вывод, что продукт этот постоянно развивается, в нем очень много полезной функциональности. GreenPlum позволяет гибко построить хранение данных с использованием различных мощностей и накопителей информации, используя распределение и партиционирование данных. Тот же сервер Vertica не позволяет такого и декларирует, что все сервера в кластере должны иметь одинаковые характеристики, а значит любой апгрейт процессоров, памяти или дисковых накопителей нужно производить на всех серверах сразу. Ну а про ящик Netezza, в который даже нельзя лазить, и так все понятно.

Покопавшись в интернете и пообщавшись с людьми, использующими эти сервера, я нашел много достоинств и недостатков у них. Критичного ничего выявлено не было, так что можно смело похвалить все три продукта. Однако, чаша весов у нас все таки склонилась к Vertica, и на то есть свои причины:
  1. Колоночное хранение данных и компрессия данных действительно нам важны. У Netezza данные хранятся блоками позаписно, а у GreenPlum колоночное хранение урезанное, в таблицах с таким хранением нельзя изменять и удалять записи, только добавлять новые. Компрессия у Vertica получается выгоднее всех за счет того, что в блоках лежат данные колонок, то есть данные одинакового типа, а значит, алгоритмы сжатия и разжатия таких данных более эффективны.
  2. У Vertica администрирование сервера заключается в том, чтобы организовать пулы соединений для пользователей, позволяющих контролировать потребление ресурсов сессиями. У Netezza ничего делать не надо, черный ящик делает все сам. У GreenPlum достаточно серьезный набор требований к администрированию кластера, состоящий из контроля пространств хранения данных и нагрузок серверов. Держать штат администраторов нам не позволял планируемый бюджет, а полностью доверить администрирование автомату не позволяло требование, что работать с хранилищем могут не только BI системы, но и напрямую сотрудники с помощью SQL, а значит, был нужен более гибкий и жесткий контроль за такими пользователями.
  3. У Vertica и GreenPlum оптимизация работы с данными заключается в правильном проектировании хранения данных в таблицах. У Vertica это достигается с помощью управления сегментации и указания сортировки данных, у GreenPlum - с помощью партиций, пространств и индексов. Netezza делает все сама, автоматически распределяя сегментацию и сортировку данных. Однако, у Vertica в запасе еще есть проекции, посредством которых можно описать дублирующие структуры хранения данных в виде нужных полей таблиц, со своей сегментацией, сортировкой и, при необходимости группировкой полей, в виде хранения в одном блоке. Это позволяет определить различные типовые запросы к данным, и, создав проекции, значительно ускорить выполнение таких запросов. Данные проекций автоматически обновляются вместе с данными таблиц. Минусами такого подхода можно назвать дополнительные затраты на запись данных и увеличение объема хранения данных. С учетом того, что у нас достаточно много типовых отчетов и запросов по большим объемам данных, проекции смотрелись наиболее предпочтительно на фоне возможностей конкурентов.
  4. Параллельная загрузка из множества источников данных частыми порциями в реал-тайм - достаточно серьезное требование для серверов хранилищ данных, в большинстве своем ориентированных на инкрементную батч загрузку пакетов данных по расписанию. Здесь Vertica вне конкуренции. Сервер имеет ноу-хау - механизм WOS, позволяющий загружать данные сессиям в специальную выделенную область памяти с подтверждением транзакции без ожидания окончания работ по распределению и переносу данных на диск. Помимо скорости вставки данных, улучшается и качество хранения данных в базе - по мере заполнения новыми данными от сессий, WOS их собирает, сегментирует, сортирует и записывает в базу данных, снижая их дефрагментацию, которая неизбежно бы была при большом количестве вставок данных множеством сессий.
  5. Модель лицензирования Vertica определяется объемом исходных данных. Никаких ограничений на техническую часть нет. Netezza продается как ящик. Если его не хватает, нужно купить новый ящик, а старый выбросить. GreenPlum лицензируется по количеству пространства серверов кластера. В итоге, за каждый новый сервер в кластер нужно докупать лицензию с учетом добавленного места на накопителях этого сервера. Для нашего проекта оказалась выгоднее модель лицензирования Vertica - рост данных у нас прогнозируемый, а вот нагрузки по их обработке будут постоянно увеличиваться за счет подключения к хранилищу новых систем и пользователей. С Vertica можно быстро увеличить производительность кластера, просто докупив и подключив новые сервера к нему, не тратясь на лицензии.
Вот в принципе и основные пункты, которые подтолкнули нас к выбору СУБД Vertica. Достаточно симпатично смотрелся сервер Netezza, но нам не подходило следующее: замена ящиков без возможности апгрейтов, относительно старое железо на текущий момент, а значит необходимость замены сервера при выходе новой версии Netezza на новом железе. GreenPlum же показался хорошим сервером для тех, у кого множество различных видов данных с разделением на "горячие" оперативные и "холодные" архивные данные. Если Vertica похожа на этакий MPP IQ, то GreenPlum очень похож принципами на Oracle, но с MPP архитектурой.

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

До новых записей в блоге!