Привет.
Хочу написать в тему, почему мы выбрали Vertica для построения хранилища телекоммуникационной компании и кто еще был рассмотрен в ходе выбора сервера хранилищ данных.
Однако, в ходе подготовки требований к проекту построения сетевого хранилища данных, появился ряд требований, которые поставили жирный и окончательный крест на кандидатуре Sybase IQ:
Хочу написать в тему, почему мы выбрали Vertica для построения хранилища телекоммуникационной компании и кто еще был рассмотрен в ходе выбора сервера хранилищ данных.
Изначально как кандидат на роль хранилища данных рассматривался Sybase IQ. Из плюсов данного сервера нужно сразу отметить, что это колонко-ориентированный СУБД с полноценным нулевым администрированием. Первое означает, что легко хранить и обрабатывать массивы данных с большим количеством столбцов. Второе,- что для этого не требуется штат администраторов и глубоких познаний по настройке и оптимизации работы сервера на больших объемах данных. Ну и не маловажную роль играло то, что я работал в Sybase и хорошо знал этот продукт.
Однако, в ходе подготовки требований к проекту построения сетевого хранилища данных, появился ряд требований, которые поставили жирный и окончательный крест на кандидатуре Sybase IQ:
- Одновременная загрузка из множества потоков данных. В Sybase IQ существует ограничение на монопольную запись в таблицу, то есть в один момент времени в таблицу может добавлять или изменять данные только одна сессия.
- Горизонтальное масштабирование кластера сервера для легкого наращивания мощностей при значительном увеличении потоков загружаемых данных и количества 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, и на то есть свои причины:
- Колоночное хранение данных и компрессия данных действительно нам важны. У Netezza данные хранятся блоками позаписно, а у GreenPlum колоночное хранение урезанное, в таблицах с таким хранением нельзя изменять и удалять записи, только добавлять новые. Компрессия у Vertica получается выгоднее всех за счет того, что в блоках лежат данные колонок, то есть данные одинакового типа, а значит, алгоритмы сжатия и разжатия таких данных более эффективны.
- У Vertica администрирование сервера заключается в том, чтобы организовать пулы соединений для пользователей, позволяющих контролировать потребление ресурсов сессиями. У Netezza ничего делать не надо, черный ящик делает все сам. У GreenPlum достаточно серьезный набор требований к администрированию кластера, состоящий из контроля пространств хранения данных и нагрузок серверов. Держать штат администраторов нам не позволял планируемый бюджет, а полностью доверить администрирование автомату не позволяло требование, что работать с хранилищем могут не только BI системы, но и напрямую сотрудники с помощью SQL, а значит, был нужен более гибкий и жесткий контроль за такими пользователями.
- У Vertica и GreenPlum оптимизация работы с данными заключается в правильном проектировании хранения данных в таблицах. У Vertica это достигается с помощью управления сегментации и указания сортировки данных, у GreenPlum - с помощью партиций, пространств и индексов. Netezza делает все сама, автоматически распределяя сегментацию и сортировку данных. Однако, у Vertica в запасе еще есть проекции, посредством которых можно описать дублирующие структуры хранения данных в виде нужных полей таблиц, со своей сегментацией, сортировкой и, при необходимости группировкой полей, в виде хранения в одном блоке. Это позволяет определить различные типовые запросы к данным, и, создав проекции, значительно ускорить выполнение таких запросов. Данные проекций автоматически обновляются вместе с данными таблиц. Минусами такого подхода можно назвать дополнительные затраты на запись данных и увеличение объема хранения данных. С учетом того, что у нас достаточно много типовых отчетов и запросов по большим объемам данных, проекции смотрелись наиболее предпочтительно на фоне возможностей конкурентов.
- Параллельная загрузка из множества источников данных частыми порциями в реал-тайм - достаточно серьезное требование для серверов хранилищ данных, в большинстве своем ориентированных на инкрементную батч загрузку пакетов данных по расписанию. Здесь Vertica вне конкуренции. Сервер имеет ноу-хау - механизм WOS, позволяющий загружать данные сессиям в специальную выделенную область памяти с подтверждением транзакции без ожидания окончания работ по распределению и переносу данных на диск. Помимо скорости вставки данных, улучшается и качество хранения данных в базе - по мере заполнения новыми данными от сессий, WOS их собирает, сегментирует, сортирует и записывает в базу данных, снижая их дефрагментацию, которая неизбежно бы была при большом количестве вставок данных множеством сессий.
- Модель лицензирования Vertica определяется объемом исходных данных. Никаких ограничений на техническую часть нет. Netezza продается как ящик. Если его не хватает, нужно купить новый ящик, а старый выбросить. GreenPlum лицензируется по количеству пространства серверов кластера. В итоге, за каждый новый сервер в кластер нужно докупать лицензию с учетом добавленного места на накопителях этого сервера. Для нашего проекта оказалась выгоднее модель лицензирования Vertica - рост данных у нас прогнозируемый, а вот нагрузки по их обработке будут постоянно увеличиваться за счет подключения к хранилищу новых систем и пользователей. С Vertica можно быстро увеличить производительность кластера, просто докупив и подключив новые сервера к нему, не тратясь на лицензии.
Вот в принципе и основные пункты, которые подтолкнули нас к выбору СУБД Vertica. Достаточно симпатично смотрелся сервер Netezza, но нам не подходило следующее: замена ящиков без возможности апгрейтов, относительно старое железо на текущий момент, а значит необходимость замены сервера при выходе новой версии Netezza на новом железе. GreenPlum же показался хорошим сервером для тех, у кого множество различных видов данных с разделением на "горячие" оперативные и "холодные" архивные данные. Если Vertica похожа на этакий MPP IQ, то GreenPlum очень похож принципами на Oracle, но с MPP архитектурой.
На текущий момент уже почти годовой эксплуатации и в базе данных в 8 тб, опыт использования в промышленных масштабах доказал, что с Vertica мы не ошиблись и сделали правильный выбор! Тьфу-тьфу-тьфу конечно :)
До новых записей в блоге!