Facebook открыла исходники распределённой реляционной СУБД для работы с петабайтами
Компания Facebook
Это уже не первая попытка Facebook совместить удобство реляционных СУБД и масштабируемость, свойственную MapReduce и NoSQL-решениям. Несколько лет назад инженеры компании разработали систему хранения данных Hive. В отличие от Presto, её основой служила платформа Hadoop (открытая реализация концепции MapReduce). Кроме того, Hive не понимала SQL. Система использовала похожий, но не совпадающий язык запросов.
Создатели Presto пришли к выводу, что отказ от MapReduce значительно ускорит обработку запросов. И, судя по всему, не зря: их разработка на порядок превосходит Hive по эффективности загрузки процессора и времени задержки.
В
«Клиент отправляет SQL координатору Presto. Координатор разбирает запрос, анализирует его, а затем планирует исполнение запроса. Диспетчер соединяет конвейер исполнения, даёт поручения узлам, которые расположены ближе всего к данным, и следит за продвижением обработки. Клиент извлекает данные из внешней ступени, которая, в свою очередь, заимствует их с ещё более низких уровней».
На схеме этапы этого пути показаны в виде зелёных прямоугольников. Parser производит разбор, planner планирует, а scheduler — делит работу между серверами.
Presto реализована на Java. Более того, система способна компилировать в байт-код Java даже сами запросы SQL, причём делать это так, чтобы по возможности избежать проблем с выделением памяти и сборкой мусора. На этом превращения запроса на заканчиваются: виртуальная машина, исполняющая байт-код, «на лету» компилирует его в машинный код. В результате он выполняется ещё быстрее.
Разработка Presto началась около года назад. В начале 2013 года первые версии этой системы стали внедрять в Facebook. Весной соцсеть начала полномасштабный переход на Presto. Теперь она работает на нескольких гигантских кластерах (количество узлов в одном из них может достигать тысячи), ежедневно исполняя более 30 тысяч запросов к петабайту информации.
Исходные коды Presto опубликованы на сервисе Github: вот её