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

топ 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.
Мы видим революцию. Жаль, что мы ещё не осознаем до коцна, что именно происходит прямо на наших глазах.
Надеюсь, я вам помог это увидеть.

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

Архив записей в блогах:
Сидеть за столом в ожидании торта – дело, конечно, хорошее. Но скучное. Выбрали пять небанальных вариантов, как отметить с ребёнком праздник или день рождения, чтобы потом вспоминать об этом весь год. Веселье без границ ...
Вот пыталась вспомнить, что у меня в детстве было на завтрак - и не смогла. Вообще. Обеды помню, ужины помню, пирожки по праздникам тоже помню, а завтраки - нет. Это я к чему вспоминала-то: каждое утро на завтрак детям надо чего-нить изобретать новое. Хлопья из пакета, залитые молоком, ...
"...Те же приемы повторяются до трех раз; затем задыхающегося от крику и жары ребенка снимают с лопаты". "Нередко случается, - продолжает корреспондент, - что при этом не успеют отвязать ребенка, как он уже умирает". "Знать, ему не жить, - говорят бабы, - ...
Госдума рассмотрит запрет секса до брака Внебрачные половые связи в России могут запретить с 2016 года, инициативу выдвинул петербургский депутат Виталий Милонов. Парламентарий уже направил депутата Госдумы соответствующий документ. «Борец за нравственность» предлагает запретить секс в ...
Стандартная уборка в доме или квартире сопряжена с огромной тратой времени и сил. Но сколько бы мы не убирали, через короткий промежуток времени снова появляется пыль и начинается все сначала. Есть способ упростить задачу и сделать эту процедуру менее частой. Так называемая, лимонная ...