Алгоритм параллельного пакетного построения R

advertisement
Алгоритм параллельного пакетного построения
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
Download