Модель стоимости

advertisement
АДАПТИВНЫЙ ПРИБЛИЖЕННЫЙ
АЛГОРИТМ СОЕДИНЕНИЯ
Долматова О. А, студентка кафедры информатики СПбГУ,
oxana.dolmatova@gmail.com
Введение
В этой работе мы рассматриваем выполнение декларативных запросов
в распределенной среде или среде с различной интенсивностью данных. В
таких случаях желательно иметь возможность выполнять запросы за
предсказуемое время и, возможно, с неточным результатом из-за
отсутствия достаточного количества ресурсов или временных
ограничений. Общая структура исполнения сложных декларативных
запросов описана в [5].
В контексте сложных запросов, соединение является одной из наиболее
важных и интенсивно используемых операций. Таким образом, цель этой
работы представить адаптивный приближенный алгоритм выполнения
соединения с точным предикатом.
В традиционных базах данных существует три стандартных алгоритма
выполнения соединения, и все они созданы для получения точного ответа.
Однако наш алгоритм приближенной природы. В нашем случае термин
«приближенный» означает неполноту результата. То есть какое-то
количество кортежей, удовлетворяющих предикату соединения, может не
попасть в ответ. Но все пары, что входят в ответ, точно удовлетворяют
предикату. Это значит, что качество результата зависит от выделенных на
исполнение операции ресурсов.
Описание нового алгоритма
В новом алгоритме выбор стратегии выполнения запроса напрямую
зависит от свойств входных данных и количества выделенных ресурсов.
Мы предполагаем, что имеем ограниченное количество внутренней
памяти и определенное количество ресурсов, и, возможно, большее
количество данных. Так как входные данные представлены в виде потоков,
то повторный доступ невозможен, и мы пытаемся найти как можно больше
кортежей за минимальное время. Также, в какой-то момент необходимо
будет избавляться от прочитанных и обработанных объектов, чтобы
освободить память для новых.
Если оба потока отсортированы, тогда новый алгоритм работает как не
блокирующее соединение слиянием сортированных списков. Алгоритм
получает количество объектов у модели стоимости, которое может
прочитать из правого и левого потоков, затем читает и делает соединение.
Если только один из входов отсортирован, то поведение алгоритма
подобно смеси алгоритма соединения слиянием сортированных списков
(sort-merge join) и алгоритма соединения вложенными циклами (nested loop
join).
В этом случае есть несколько различных вариантов поведения:
 Сортированный вход помещается в память целиком и у нас
есть достаточное количество времени для обработки данных.
Тогда алгоритм считывает весь маленький сортированный
поток, а в оставшуюся свободной часть памяти загружает блок
из несортированного входа, сортирует его и делает соединение
слиянием сортированных списков. После это считывает
следующий блок и т.д., столько раз, сколько рассчитывает
модель стоимости.
 Сортированный вход помещается в память, но ресурсов не
достаточно. Алгоритм загружает часть объектов из первого
входа, часть из второго, сортирует последние и делает
соединение слиянием сортированных списков этих двух
множеств. Все параметры рассчитывает модель стоимости.
 Оба потока не помещаются в память. Алгоритм читает часть
первого входа и часть второго, сортирует второй и делает
соединение слиянием сортированных списков, после чего
заменяет либо часть первого входа, либо второго на новую.
Если оба потока несортированные, то поведение схоже. Отличие
заключается в количестве читаемых объектов и в сортировке сразу
двух множеств.
Модель стоимости
Наша модель стоимости является расширенной по сравнению со
стандартными моделями и зависит от четырех основных параметров:
внутренней памяти, размеров входных потоков, упорядоченности объектов
и количества выделенных ресурсов. Так как алгоритм приближенный, так
же желательно определять предполагаемое качество результата.
Операция модели стоимости определена так:
Cost (data_order, source_in, internal_memory, resources) = (quality,
objects_out), где:
 cost функция стоимости, соединяет входные и выходные
параметры;
 data_order состоит из left_order и right_order, которые показывают
упорядоченность в первом и втором потоках соответственно;
 source_in состоит из left_source и right_source которые показывают
Количество объектов в первом и втором потоке соответственно;




internal_memory это размер внутренней памяти, который может
быть использован алгоритмом;
resources количество времени, выделенного на выполнение
запроса (в миллисекундах);
quality качество результата, соответствует полноте.
objects_out состоит из left_objects, right_objects, inner_count и
outer_count. Первые два параметра обозначают размер правого и
левого блоков объектов. Последние два количество внешних и
внутренних циклов для алгоритма.
Так же нам нужно ввести некоторые системные параметры:
 Tf время, нужное для чтения одного объекта из потока;
 Ts время, отвечающее за сортировку.
Так как размер внутренней памяти маленький относительно
общего случая входных данных, то время сортировки можно
ограничить сверху линейной зависимостью по отношению к
числу объектов.
Для вычисления параметров, описанных выше, были проведены
эксперименты для разного количества входных объектов. Затем, с
помощью регрессии получены усредненные значения параметров.
Не умаляя общности можно считать, что left_source меньше, чем
right_source.
Из-за ограничений по размеру работы, рассмотрим только один из
случаев в модели стоимости. Пусть два входных потока не
отсортированные, и не помещаются в память, тогда:
left_objects := min (left_source, internal_memory * 0.9);
right_objects := min (right_source, internal_memory * 0.1);
outer_count := (min (resources/(Tf + Ts) * (2*left_objects),
left_source/left_objects));
inner_count:= (min((resources - left_objects * (Tf + Ts) *
outer_count)/(right_objects * (Tf + Ts) *outer_count,
right_source/(right_objects * outer_count))));
Качество
Следуя определениям в [2,6], можно рассматривать абсолютное и
относительное качество.
В нашей работе мы будем рассматривать только относительное
качество. Оно показывает, насколько получившийся результат
приближенного выполнения соотносится с результатом точного
выполнения. В нашем случае это соотношение между числом
возвращенных кортежей и числом всех кортежей, удовлетворяющих
предикату. Следовательно, относительное качество лежит в промежутке
между нулем и единицей. Однако, очевидно, что в некоторых случаях
невозможно получить качество, равное единице даже при неограниченном
времени из-за ограниченности внутренней памяти.
Эксперименты
время, мсек
Мы провели эксперименты, оценивающие точность, как построенной
модели стоимости, так и полученного результата.
Так же мы выявляли зависимости количества найденных пар от того,
как устроены входящие данные. Такие эксперименты помогают наглядно
показать свойства алгоритма.
Экспериментальный прототип был однопоточным и выполнен на языке
PL/SQL.
Все эксперименты проводились на двухъядерном Intel Pentium Dual 1,6
GHz CPU и 4GB RAM. Так же мы предположили, что внутренняя память
может содержать не более 5000 объектов, и что входные данные
равномерно распределены. Таким образом, входные данные были
автоматически сгенерированы с равномерным распределением.
График на рисунке 1 иллюстрирует точность модели стоимости. Шкала
ординат обозначает время в миллисекундах (ожидаемое и реальное), а
абсцисс количество объектов в первом и втором входе.
1000
800
600
400
ожидаемое
200
50x50
20x30
20x20
10x15
10x10
5x5
5x10
2x3
1x1
0.5x0.5
0
реальное
количество объектов (тысячи)
Рис.1 Выполнение запроса с одним сортированным входом
ожидаемое
реальное
0.5x0.5
1x1
2x3
5x5
5x10
10x10
10x15
20x20
20x30
50x50
качество
1.2
1
0.8
0.6
0.4
0.2
0
количество объектов (тысячи)
Рис.2 Качество результата с одним сортированным входом
Рис. 1 демонстрирует выполнение запроса только с одним
сортированным входом. Здесь можно заметить нелинейную зависимость
между затрачиваемым временем и количеством объектов на входе. Это
объясняется тем, что в первых трех случаях потоки целиком могут
поместиться в память, а, значит, алгоритм наиболее эффективен, а в
остальных случаях нелинейно возрастает количество циклов.
Рис. 2 иллюстрирует ожидаемое и реальное качество результата,
соответственно рисунку 1. Можно видеть переоценку в точке 20х30, но в
целом средняя относительная ошибка по качеству составляет 7%. Ресурсы,
выделенные на выполнение первых трех запросов, практически равны. И в
первых двух случая их достаточно для точного выполнения операции, то в
третьем их не хватает, и качество резко падает. Так же падение качества в
остальных случаях объясняется тем, что все объекты хотя бы из одного
входа уже невозможно поместить в памяти целиком.
Остальные эксперименты не представлены из-за ограничений по
размеру тезисов.
Связанные работы
Вдохновением для этой работы послужила работа [3]. Автор
представляет эффективный адаптивный алгоритм выполнения соединения,
который комбинирует преимущества традиционных алгоритмов
соединения.
Основным
отличием
этого
алгоритма
является
приспособленность к работе с потоками и способность управлять
качеством, изменяя количество выделенных ресурсов.
В [7] представлен адаптивный алгоритм, основанный на hash join, и
подходящий для многопользовательской среды. Авторы предлагают
гибкую технологию, созданную для работы со средой с динамически
изменяющимся количеством доступной памяти. Главная цель работы
заключается в регулировании использования ресурсов, чтобы позволить
выполнять запрос одновременно с работой других приложений.
Сравнение параллельного алгоритма соединения вложенными циклами
и соединения на основе хеширования представлено в [1]. Хотя авторы
рассматривают соединение вложенными циклами, один из предложенных
вариантов предполагает сортировку внешнего входа.
Выполнение запросов с ограничениями времени предложено в [4].
Авторы предлагают расширенные SQL запросы с различными
параметрами.
Таким образом, есть широкий набор разнообразных алгоритмов для
выполнения соединения. Однако в основном они созданы для соединения
по подобию или представляют собой адаптивные алгоритмы для точного
соединения.
Заключение
Мы представили детальное описание потокового адаптивного
алгоритма для приближенного выполнения соединения на основе
алгоритма
соединения
слиянием
сортированных
списков,
в
предположении, что он будет использоваться в контексте [5].
Так же в работе приведена модель стоимости предложенного
алгоритма, вычисляющая предположительное качество результата,
полученного за выделенное количество времени, и позволяющая
управлять соотношением ресурсы/качество.
Литература
1.
2.
3.
4.
5.
6.
7.
DeWitt DJ, Naughton JF, Burger J (1993) Nested loops revisited. In: PDIS,
pp 230–242
Oxana Dolmatova, Anna Yarygina, Boris Novikov: Cost Models for
Approximate Query Evaluation Algorithms. DB&Local Proceedings
2012:20-28
Goetz Graefe: New algorithms for join and grouping operations. Computer
Science - R&D 27(1): 3-27 (2012)
Ying Hu, Seema Sundara, Jagannathan Srinivasan. Supporting timeconstrained sql queries in oracle. In Proceedings of the 33rd international
conference on Very large data bases, VLDB'07, pages 1207-1218. VLDB
Endowment, 2007
Boris Novikov, Natalia Vassilieva, Anna Yarygina: Querying big data.
CompSysTech 2012: 1-10
Anna Yarygina, Boris Novikov: Optimizing the Resource Allocation for
Approximate Query Processing.ADBIS (2) 2012: 297-308
Hansjörg Zeller, Jim Gray: An Adaptive Hash Join Algorithm for Multiuser
Environments. VLDB 1990: 186-197
Download