Классика баз данных - статьи

       

Модель выполнения


Модель выполнения, обеспечиваемая SQL/MR-функциями, является обобщением модели MapReduce [7]. Если использовать термины MapReduce, SQL/MR-функция может быть либо отображателем (mapper), либо сжимателем (reducer), что мы назывем функцией над строками (row function) и функцией над разделами (partition function) соответственно. В SQL/MR-функциях можно реализовать оба интерфейса, если для данной функции осмысленны оба режима работы. Как показано на рис. 5, по причине интеграции SQL/MR с SQL тривиально образуется любая комбинация map и reduce SQL/MR-функций. В SQL/MR допускается любое число и любой порядок вызовов функций map и reduce, вставленных в SQL-запрос, в то время как в MapReduce можно вызвать только одну функцию map, а затем только одну функцию reduce.

Модель выполнения SQL/MR разработана для использования в массивно-параллельной СУБД и поэтому должна быть по умолчанию параллельной. Экземпляры функции SQL/MR будут выполняться параллельно в каждом узле параллельной СУБД, точно так же, как в среде MapReduce в кластере выполняются задачи map и reduce. Число экземпляров SQL/MR-функции в одном рабочем узле не фиксированно. Каждый экземпляр видит некоторый уникальный набор строк, т.е. каждая строка обрабатывается только одним экземпляром SQL/MR-функции. Определения функций над строками и разделами обеспечивают их параллельное выполнение масштабируемым образом. Даже при наличии в СУБД всего одного узла инфраструктура SQL/MR остается полезной, поскольку обеспечивает полиморфные и самоописываемые UDF, которые могут распараллеливаться на нескольких процессорных ядрах.

Теперь мы опишем функции над строками и разделами, а также покажем, как их модели выполнения поддерживают параллелизм.

  • Функция над строками. Каждая строка входной таблицы будет обрабатыватьтся ровно одним экземпляром SQL/MR-функции. Как описывается в разд. 4, с точки зрения семантики каждая строка обрабатывается независимо, что позволяет механизму поддержки выполнения контролировать параллелизм. Для каждой входной строки каждая функция над строками может произвести ноль или большее число строк.
    Функции над строками похожи на функцию map среды MapReduce; основной смысл функций над строками состоит в выполнении низкоуровневых преобразований и обработки.


  • Функция над разделами. Каждая группа строк, определяемая в соответствии с разделом PARTITION BY, будет обрабатываться в точности одним экземпляром SQL/MR-функции, и этот экземпляр функции получит сразу всю группу строк. Если в вызове функции присутствовал и раздел ORDER BY, строки внутри каждого раздела поступают в экземпляр функции уже должным образом упорядоченными. С точки зрения семантики каждый раздел обрабатывается независимо, что позволяет механизму поддержки выполнения производить распараллеливание на уровне разделов. Для каждого входного раздела SQL/MR-функция над разделами может производить ноль или большее число строк. Функции над разделами похожи на функцию reduce в MapReduce. Мы называем их функциями над разделами, чтобы подчеркнуть их использование в групповой обработке, поскольку в важных сценариях использования такая функция в действительности не сокращает размер набора данных.



Содержание раздела