Алгоритм параллельного пакетного построения R-дерева для архитектуры с разделяемой памятью Шкуратов Илья Чернышев Георгий Санкт-Петербургский Государственный Университет 24 апреля 2015 Шкуратов И., Чернышев Г. (СПбГУ) Параллельное построение R-дерева 24 апреля 2015 1 / 22 Содержание 1 Введение 2 Формулировка проблемы 3 Параллельное построение R-дерева 4 Локальная оптимизация 5 Заключение Шкуратов И., Чернышев Г. (СПбГУ) Параллельное построение R-дерева 24 апреля 2015 2 / 22 Введение Многомерное индексирование Определение Индекс — избыточная структура данных, предназначенная для ускорения поиска. Индексируемые объекты: Типы запросов: многомерные точки точечные пространственные объекты диапазонные Типы данных: статические k ближайших ... динамические Шкуратов И., Чернышев Г. (СПбГУ) Параллельное построение R-дерева 24 апреля 2015 3 / 22 Введение Примеры статических данных Данные для геоинформационных систем: 2D и 3D координаты, объекты, представляющие здания, дороги, реки, города и т.д. Данные об окружающей среде: уровень осадков, уровень загрязнения воздуха, содержание пестицидов и токсинов в почве или воде и т.д. Данные о переписи населения Шкуратов И., Чернышев Г. (СПбГУ) Параллельное построение R-дерева 24 апреля 2015 4 / 22 Введение Использование R-деревьев Индустриальные СУБД: PostgreSQL Oracle IBM Informix MySQL Шкуратов И., Чернышев Г. (СПбГУ) Геоинформационные системы: MapInfo TatukGIS SuperMap Параллельное построение R-дерева 24 апреля 2015 5 / 22 Введение Определение R-дерева D A Обозначения: b — минимальное допустимое количество записей в узле. B — максимальное допустимое количество записей в дереве. E G M C K B H J I MBR — минимальный ограничивающий прямоугольник. L N A B C D E F G Шкуратов И., Чернышев Г. (СПбГУ) F Параллельное построение R-дерева H I J K L M N 24 апреля 2015 6 / 22 Введение Пакетная загрузка Различные подходы построения R-деревьев: Вставка по-одному Пакетная вставка Построение сразу по всем данным — пакетная загрузка. Шкуратов И., Чернышев Г. (СПбГУ) Параллельное построение R-дерева 24 апреля 2015 7 / 22 Формулировка проблемы Формулировка проблемы Современные тенденции: увеличение количества ядер в процессоре, увеличение объёма оперативной памяти. Проблема Построение статического R-дерева в shared-memory архитектуре с использованием нескольких потоков. Шкуратов И., Чернышев Г. (СПбГУ) Параллельное построение R-дерева 24 апреля 2015 8 / 22 Параллельное построение R-дерева Общий алгоритм для shared-nothing архитектуры 1 Перераспределение данных. 1 Рабочие делают случайную выборку и посылают её мастеру. 2 Мастер вычисляет функцию разбиения и посылает её рабочим. 3 Рабочие пересылают друг другу данные, используя функцию разбиения для определения адресата. 2 Построение очередного уровня индекса. Каждый рабочий формирует узлы индекса для локальных данных. 3 Повторять шаги 1 и 2 до тех пор, пока не останется единственный узел — корень. Замечание Если все данные помещаются в память, то этот алгоритм можно использовать и для shared-memory архитектуры. Шкуратов И., Чернышев Г. (СПбГУ) Параллельное построение R-дерева 24 апреля 2015 9 / 22 Параллельное построение R-дерева Формирование узлов Можно выделить два подхода к формированию узлов при пакетной загрузке: Кластеризация больше подходит для индексирования многомерных точек. Сортировка Sort-Tile Recursive Методы, использующие кривые, заполняющие пространство (SFC-методы). Замечание Особенность методов, основанных на сортировке в том, что они ориентированы на эффективное использование памяти. Шкуратов И., Чернышев Г. (СПбГУ) Параллельное построение R-дерева 24 апреля 2015 10 / 22 Параллельное построение R-дерева Построение с помощью SFC Кривые позволяют задать линейный порядок на множестве прямоугольников. Кривая Гильберта1 . Упаковка с помощью кривых, заполняющих пространство: 1 Каждому прямоугольнику сопоставляем значение кривой. 2 Сортируем прямоугольники по этим значениям. 3 Объединяем прямоугольники в узлы по k штук, в соответствии с порядком сортировки. b ≤ k ≤ B — позволяет задавать процент используемой памяти. 1 "Hilbert curve". Licensed under CC BY-SA 3.0 via Wikipedia Шкуратов И., Чернышев Г. (СПбГУ) Параллельное построение R-дерева 24 апреля 2015 11 / 22 Параллельное построение R-дерева gopt * -partitioning Achakeev, D. et al. CIKM ’12 Откажемся от требования заполнять узлы ровно k записями. Теперь сортировка не определяет однозначно распределение записей по узлам. Определим функцию стоимости для разбиения множества прямоугольников. Выберем разбиение, которое минимизирует функцию стоимости. Шкуратов И., Чернышев Г. (СПбГУ) Параллельное построение R-дерева 24 апреля 2015 12 / 22 Параллельное построение R-дерева Модель стоимости Модель оценивает количество узлов дерева, которое будет просмотрено для данного запроса. Предположения: пространство данных есть единичный куб, центр запроса равномерно распределён на этом кубе. Пусть дерево состоит из N узлов. Длины сторон их MBR обозначим rxi и ryi . А длины сторон запроса — qx и qy . cost(R-tree) = N ∑︁ (rx + qx) · (ryi + qy ) i i=1 Шкуратов И., Чернышев Г. (СПбГУ) Параллельное построение R-дерева 24 апреля 2015 13 / 22 Параллельное построение R-дерева Стоимость разбиения Пусть P – разбиение. Тогда cost(P) = ∑︁ (rx + sx) · (ry + sy ) r ∈P Можно заметить, что cost(P) = cost(Pleft ) + cost(Pright ) для ∀Pleft , Pright , т.ч. P = Pleft ∪ Pright и Pleft ∩ Pright = ∅. Шкуратов И., Чернышев Г. (СПбГУ) Параллельное построение R-дерева 24 апреля 2015 14 / 22 Параллельное построение R-дерева Нахождение оптимального разбиения Пусть p1 , p2 , ..., pm — упорядоченное множество прямоугольников, а pi,j = MBR(pi , pi+1 , . . . , pj ) — минимальный ограничивающий прямоугольник для отрезка. gopt * (i) = min {gopt * (i − j) + cost(pi−j+1,i )} b≤j≤B Итоговое разбиение авторы назвали gopt * -partitioning. Можем найти решение за линейное время с помощью динамического программирования. На тестовых данных количество обращений к листьям удалось снизить на 30 − 40% для Hilbert-packed и Z-packed R-tree. Шкуратов И., Чернышев Г. (СПбГУ) Параллельное построение R-дерева 24 апреля 2015 15 / 22 Локальная оптимизация Мотивация Что получается, когда мы используем gopt * -partitioning для параллельного построения? Worker 1 Worker 2 Worker 3 Optimal Optimal Optimal Optimal – ? Проблема Чем больше степень параллелизма, тем хуже ожидаемое качество разбиения. Шкуратов И., Чернышев Г. (СПбГУ) Параллельное построение R-дерева 24 апреля 2015 16 / 22 Локальная оптимизация Какие разбиения мы упускаем? Рассмотрим случай для двух потоков, b = 2, B = 3 и 12 прямоугольников: 1, 2, 3, 4, 5, 6 7, 8, 9, 10, 11, 12 Рассмотренное разбиение 1, 2, 3, 4, 5, 6 7, 8, 9, 10, 11, 12 Упущенное разбиение Вспомним Данные находятся в памяти одной машины ⇒ потоки могут «дёшево» получать доступ к соседним отрезкам. Воспользуемся этим, чтобы рассмотреть упущенные разбиения! Шкуратов И., Чернышев Г. (СПбГУ) Параллельное построение R-дерева 24 апреля 2015 17 / 22 Локальная оптимизация Нахождение общих разбиений для смежных частей Пусть «левый» поток, нашёл оптимальные разбиения для отрезков [1, 7] и [1, 8]: ? ? 1, 2, 3, 4, 5, 6 7, 8, 9, 10, 11, 12 1, 2, 3, 4, 5, 6 7, 8, 9, 10, 11, 12 Чтобы получить разбиение объединения отрезков, необходимо узнать разбиения, оптимальные на отрезках [8, 12] и [9, 12]. Шкуратов И., Чернышев Г. (СПбГУ) Параллельное построение R-дерева 24 апреля 2015 18 / 22 Локальная оптимизация Нахождение общих разбиений для смежных частей Будем находить разбиение для правой части «справа-налево»: P({12}) ⇒ P({12, 11}) ⇒ · · · ⇒ P({12, 11, 10, 9, 8, 7}) В ходе этого мы получим разбиения для всех отрезков: [11, 12], [10, 12], [9 , 12 ], [8 , 12 ], [7, 12]. Теперь мы можем оценить все упущенные разбиения на объединённом отрезке: cost(P1,7 ∪ P8,12 ) = cost(P1,7 ) + cost(P8,12 ) cost(P1,8 ∪ P9,12 ) = cost(P1,8 ) + cost(P9,12 ) Шкуратов И., Чернышев Г. (СПбГУ) Параллельное построение R-дерева 24 апреля 2015 19 / 22 Локальная оптимизация Оптимальное разбиение для смежных отрезков Thread 1 1, 2, 3, 4, 5, 6 7, 8 7, 8, 9, 10, 11, 12 Thread 2 Обозначим Pi,j — разбиение, оптимальное на отрезке [i, j]. Тогда P1,12 = P1,opt ∪ Popt+1,12 , где opt = arg min(cost(P1,i ) + cost(Pi+1,12 )) 6≤i≤8 Замечание Обратим внимание, что нам достаточно «заглянуть» в соседний отрезок не более чем на B − 1 прямоугольников. Шкуратов И., Чернышев Г. (СПбГУ) Параллельное построение R-дерева 24 апреля 2015 20 / 22 Локальная оптимизация Алгоритм построения R-дерева для shared-memory архитектуры 1 2 Перераспределение данных. Построение локального индекса. Рабочие находят разбиение с помощью gopt * -partitioning с учётом перекрытия. Полученные результаты используются для нахождения разбиения на объединении соседних отрезков. 3 Построение глобального индекса. Thread 1 Thread 2 Thread 3 Optimal Шкуратов И., Чернышев Г. (СПбГУ) Thread 4 Optimal Параллельное построение R-дерева 24 апреля 2015 21 / 22 Заключение Заключение Результаты: Рассмотрены существующие алгоритмы параллельного построения R-деревьев. Предложена оптимизация одного из алгоритмов для случая использования с shared-memory архитектурой. Дальнейшие исследования: Реализация предложенного алгоритма. Исследование влияния предложенной оптимизации на скорость построения индекса и его качество. Шкуратов И., Чернышев Г. (СПбГУ) Параллельное построение R-дерева 24 апреля 2015 22 / 22