Слом парадигмы вертикального масштабирования в реляционных СУБД

топ 100 блогов zamotivator25.12.2014 Наконец-то добрался до изучения
http://www.slideshare.net/kaigai/gpgpu-accelerates-postgresql
Особое внимание уделите слайду 44


Пришло время рассказать про один страх, который давно меня преследовал и которому я не находил решения.
Появление NoSQL систем далеко не в последнюю очередь обусловлено изменившейся парадигмой масштабирования.
До относительно недавнего времени масштабирование шло вертикально.
После того, как упёрлись в физические ограничения частоты процессора, масштабирование пошло в горизонтальном направлении.


Было: рост частоты процессора, размера памяти, размеров диска, пропускной способности сети
Стало: рост числа ядер, рост числа серверов, шардирование данных.


Это очень важный водораздел, который принципиально меняет парадигму организации СУБД.
Давайте введём следующую метрику: "стоимость выполнения запроса в вватах".
Метрика может показать странной, но это наиболее коррелирующий с алгоритмической эффективностью просто измеримый критерий.
Если мы можем при помощи индекса прочитать лишь 10% записи таблицы - то мы потратим в 10 раз меньше ватт на выполнение запроса (на самом деле так не так линейно, но идею, безусловно, вы уловили)
Hadoop, Mongo и прочие full-scan системы крайне убоги с алгоритмической точки зрения и метрика "ватт/запрос" это отразит.
Классические реляционные СУБД, несмотря на хорошие показатели по нашей метрике, работают ХУЖЕ с точки зрения других метрик - именно потому, что они выращены и написаны в архитектуре вертикального масштабирования.
Данная презентация - это не просто "PostgreSQL научился использовать GPU".


Это слом парадигмы масштабирования классический реляционной СУБД.
Это революция.


Цитирую кусок из поста выше:
"Было: рост частоты процессора, размера памяти, размеров диска, пропускной способности сети
Стало: рост числа ядер, рост числа серверов, шардирование данных."


Вот "стало" - это слабые места реляционнок. Давайте их изучим немного внимательней.


- рост числа серверов и шардирование данных: с этим пока всё грустно. Если СУБД включает в себя несколько серверов, то система может выходить из строя по частям. Классические реляционные СУБД умеют лишь failover базы целиком - "всё или ничего" в терминах СУБД, а не её части. Однако, я не вижу принципиальных проблем использовать модель SciDB организации данных, естественно с некоторыми "но", но эти "но" поймут лишь разработчики СУБД, и я не буду про них тут писать (и это чисто инжереные проблемы, а не принципиальные)


- рост числа ядер [вместо роста тактовой частоты процессора]: вот это уже серьёзный bottleneck - ВСЕ реляционные СУБД были написаны в парадигме вертикального масштабирования, и выполнение плана запроса, как правильно, однопоточное.
При появлении многоядерных и многопроцессорных систем это быстренько сломали для сортировки и научились сортировать параллельно - потому что это было просто сделать
Потом научились использовать SSE и мультиплексирование строчек и обрабатывать данные bulk'ами - по пачке за раз, и это ускорило CPU-intensive операции, которые можно применять независимо для всех строчек.


В этом месте всё остановилось. Дальнейшие улучшения упирались в параллелизм join'ов, index'ов, scan'ов - где scan'ы и index'ы параллелить бесполезно просто потому, что у нас не параллелится диск И потому что до появления SSD это было ВРЕДНО, а вот с join'ами были серьезные архитектурные затыки, заложенные парадигмой вертикального масштабирования.


Я лично, когда искал способы ФУНДАМЕНТАЛЬНО ускорить выполнение запросов в реляционной СУБД смотрел в сторону именно вертикального масштабирования - JIT-компиляции планов выполнения запросов, что позволяет делать cross-function optimisation, что невозможно в классической модели интерпретатора, которую используют все текущие СУБД (кроме, кажется, Oracle, которые таскает с собой компилятор и компилирует хранимки - но это всё равно немного не тоже самое, что агрессивный инлайн и cross-function optimisation плана выполнения запроса - простой пример (A + B) * C на decimal числах, инлайн + cross-function optimisation даёт один сначала один цикл по BCD числам, вместо двух циклов (один на плюс и один на умножить) в первом приближении, во второе даёт loop unrolling, а в третьем делает эти операции на SSE).


Но речь не об этом.


Презентация, на которую я ссылаюсь в начале поста ЛОМАЕТ ПАРАДИГМУ организации выполения планов запросов, и это РЕВОЛЮЦИЯ, не больше и не меньше.
Это очень-очень важный шаг на пути к миру, где реляционные СУБД нового поколения, которой, безусловно, стал PostgreSQL (после появления этой функциональности) вытеснят full-scan системы вроде Hadoop или Mongo.
Мы видим революцию. Жаль, что мы ещё не осознаем до коцна, что именно происходит прямо на наших глазах.
Надеюсь, я вам помог это увидеть.

Оставить комментарий

Архив записей в блогах:
Сенека пишет: "Кто скажет, что щедрость следует проявлять лишь к одетым в тогу? Природа велит мне приносить пользу людям независимо от того, рабы они или свободные, свободнорожденные или вольноотпущенники, отпущенные по закону или по дружбе, — какая разница? Где есть человек, там есть ...
Здравствуйте дорогие друзья! Я недавно писала про моего котика, который атакует руки. Запрыгивает на руку с дикими черными глазами и ушами назад, обхватывает руку когтями и начинает грызть. Вцепляется в кожу и зверски так держит. Раньше было не больно, скорее смешно на него смотреть. А те ...
Поставил муж себе на телефон WhatsApp – по многочисленным, говорит, просьбам родных и знакомых. Что есть правда, меня тоже многие просят завести себе эту программу. Сидит, в общем, и дивится на это чудо современных информационных технологий: - Йолки! Он же мне сюда все мои телефонные ...
Не так давно я уже писал , что живое и неживое находятся на Гавайях в странных отношениях , то и дело имитируя друг друга. Но мне не приходило в голову, что гавайская природа умеет создавать вполне реалистичные изображения. И вот… Несколько дней назад я вышел во ...
Мама и малыш. А др. мама с дерева орёт, как скаженная) Грачонок сидит и тупит) На улице жарко и гало, но есть ветерок. Сенокос в городе, как всегда. В парке можно походить босиком по мягкой траве. Какой-то новый майонез, купили и вроде вкусный) ...