Эта статья нацелена на Большие и Очень большие Хранилища Данных, но для ровной картины в классификации немного упомянуты и маленькие.
Статья написана для специалистов, которые ценят главный критерий работы с базами данными — скорость. Речь пойдет о системах, нацеленных на грубый full scan (ораклисты уже напряглись, а терадатовцы радуются).
Давайте рассмотрим, под какой объем данных и работ лучше всего подходит Oracle или Hadoop/NoSQL.
1) На малых объемах выгоднее использовать NoSQL без Hadoop, если вам жалко 900$ на Oracle SE One. Главная его выгода — это цена, базы NoSQL, как правило, бесплатны. Малый объем данных подразумевает небольшую сложность модели и разработки в БД.
2) На средних и больших объемах у Oracle есть большие преимущества перед Teradata и Hadoop. Его главные достоинства:
1. Очень большая зрелость технологии и продукта, число внедрений по сравнению с Hadoop.
3. Очень богатый набор технологий, что существенно облегчает и убыстряет разработку по сравнению со всеми.
3. Подозреваю, что Oracle дешевле в эксплуатации, чем Hadoop, из-за стоимости аренды серверной и электроэнергии.
4. Цена по сравнению с Teradata. Если не покупать Exadata, а собрать свой сервер, думаю, разница в цене не будет огромной по сравнению с Hadoop.
У Oracle хорошая масштабируемость, но есть и узкое место, это подсистема хранения, она одна на все числогрызы. Так что до определенного предела Oracle показывает одну из лучших скорость обработки данных.
Самые быстрые самосборочные массивы хранения, что я видел, обеспечивают 18 Гб/c (хотя, уверен, что есть и больше). Exadata Full Rack обеспечивает за счет кастомных прошивок всего Hardware and Software 25 Гб/c.
Однако часто бывает, что производительности full scan в Оракле не хватает.
Расскажу на примере. В 2007-м году в Билайне в одну таблицу падало 170 млн записей в день, это все звонки по всей России. Анализировать, а выражаясь на сленге базаданщиков, бегать, по такой таблицы нереально, никакой производительности винчестеров не хватит. В таких случаях применяют оптимизацию, создают на основе такой таблицы фактов несколько больших агрегатов по 4 млн записей в день. А на основе этих больших агрегатов создают уже множество более мелких агрегатов под конкретные задачи/отчеты. Такая рода оптимизация может быть сделана и на Oracle, и на Teradata, и на Hadoop.
У данной системы есть 3 недостатка:
1. Если бизнес-пользователям требуется новое поле, которого нет в агрегатах, то процесс разработки, то есть его добавления — очень долгий.
Необходимо протягивать поле через все агрегаты.
2. Не все Ad-hoc отчеты на такой системы возможны. А они потому Ad-hoc, что требуется отчет здесь и сейчас, небольшой и простой, и это либо убытки для компании, либо ответ на вопрос уже устарел и не нужен.
3. Очень сложный ETL.
Вот для решения двух данных недостаток и можно применить Hadoop или Teradata.
3) На сверх больших объемах можно использовать Hadoop.
Плюсов у данной технологии 2:
1. Практически бесконечная линейная масштабируемость. Можно обеспечить 25, 125, 1000 Гигабайт в секунду.
2. Цена, все бесплатно. Кроме железа, конечно.
Недостаток:
1. Создание MapReduce процедур как правило трудоемкое занятие. Так что Ad-hoc запросы не будут так просты, как в SQL.
Я не сравнивал производительность Oracle и Hadoop на одном железе, но, думаю, Hadoop уступит Oracle существенно. Если учитывать только скорость винтов, то Exadata выдает 25Гб/c, обычный офисный диск 7.2К 100 Мб/c, получается, потребуется 250 обычных компьютеров. Обычный компьютер стоит 20 тыс рублей. Потребляет 200 ват. Exadata 7600 Ват. Hadoop, получается, очень невыгоден по электроэнергии, и это еще без учета того, что у Exadata все с двойным резервированием.
4) Сверх большие объемы на Teradata.
Teradata намного лучше справляется с грубым методом работы с данными, таким как full scan. У Teradata идеология shared-nothing и она очень похожа на Hadoop/NoSQL. Данные лежат на множестве серверов, каждый сервер обрабатывает свою часть сам. Но у Teradata есть существенный недостаток — довольно бедный инструментарий. На нем неудобно работать. По сравнению с Oracle не такой зрелый продукт. Цена, полный шкаф Teradata и Exadata Full Rack стоят примерно одинакого, $5 млн.
Так же упомяну общий недостаток Teradata и Hadoop. Это необходимость как-то распределить данные по нодам. Это может быть или натуральные ключ, т.е. бизнес ключ, либо сурогатный. Время тут уже не подойдет, это не партиционирование. Нужно, чтобы будущие данные ложились равномерно по всем нодам. Регион, например, для Билайна, плохой атрибут, Москва занимает 30%. Либо какой-то суррогатный или хэш-ключ.
Преимуществ Teradata в том, что у ней, по сути, тройное партицирование, а у Oracle двойное. При наличии в одной партиции 170 млн строк это оказывается очень полезным, если разбить эти 170 млн еще на 85 подподпартиций по регионам, а на Teradata еще и на 30 нодов, то конечный массив данных можно считать очень быстро.
Предел Teradata:
Teradata за счет технологии shared-nothing и сети BYNET V5 может масштабироваться до 2048 нод, по 76ТБ (10K) на ноду, итого 234PB. А одна стойка Exadata — это всего 672Тб(15К) или 200ТБ(7.2К). Параллелить Exadata не особо выгодно. Дисковое пространство то одно на всех! А если объединить дисковое пространство 2-х стоек (позволяется ли это Exadata — не знаю?), то все упрется в производительность сети 40Гигабит между стойками. Вернее, стойка 1 будет иметь быстрый и широкий доступ к своим винтам, но медленный к винтам стойки 2, и наоборот.
Нужно еще учитывать, что у Teradata и Exadata есть поколоночное, гибридное сжатия. До 4-6 раз сжатие в среднем. Хотя в NoSQL базах оно тоже есть, но возможно не такое эффективное, как в таких монстрах, в разработку которые ушло очень много денег.
Для полноты картины еще стоит упомянуть, что:
У Oracle 2 уровня кэша, оперативная память и SSD Flash Cards.
У Teradata 1 уровень — память, но зато есть ноу-хау — температурное хранилище.
Из-за 2 уровня кэша и отсутствия MPP Exadata намного лучше подходит для OLTP нагрузки.
Вывод: Если у вас нет нерегламентированных запросов, все запросы заранее известны и данных не больше 600ТB, то берите Oracle — очень удобно работать. Если больше, то берите Терадата или Hadoop.
Если у вас данных больше 100Тб и очень много нерегламентированных запросов, берите Teradata или Hadoop.
P.S. Хотел добавить в статью связку Oracle + Lustre, но понял, что она ничего нового Oracle не добавляет, все опять упирается в производительность 40 гигабитной сети.
Автор: skullodrom