Обобщенные деревья поиска: от теории к практике
LVEE 2016
Постановка задачи
За эффективный доступ к данным в современных Системах Управления Базами Данных (СУБД) отвечают специальные структуры, индексы, реализующие алгоритмы поиска и обеспечивающие поддержку надежности, конкурентности, восстановления.Используя особенности конкретного типа данных, обычно удается найти алгоритмы, работающие эффективнее общих схем. Однако, реализация таких алгоритмов в индексе сопряжена с проблемами обеспечения должной поддержки. Решение заключается в том, чтобы реализовать в СУБД структуру индекса на более высоком уровне абстракции (GiST), оставив пользователю свободу в описании алгоритма через функциональный интерфейс.
Классической задачей, требующий специальный подход к индексированию, являются задачи с пространственными данными, spatial searching. Примером такой задачи может быть нахождение всех географических объектов, расположенных в определенной близости к заданному. Осложнением в данном случае являет то, что такие объекты часто не могут быть представлены лишь парой координат, а занимают некоторую площадь.
Реализация
В качестве алгоритма для решения описанной задачи было предложено построение R-Tree дерева. Хорошее представление об алгоритмах, можно получить, познакомившись с такими структурами, как R-Tree, RD-Tree, KD-Tree (1, 2, 3, Wikipedia).
Обобщенное дерево поиска, Generalized Search Tree (GiST), обеспечивает унифицированный подход для реализации алгоритмов 4
(В частности, посредством GiST может быть реализовано R-Tree дерево.)
Для детального практического изучения индексирования, важно иметь свободную СУБД, с реализацией GiST. Также желательна хорошая расширяемость и документация. Примером такой СУБД может служить СУБД PostgreSQL, обладающая всеми перечисленными свойствами. PostgreSQL предоставляет семь интерфейсных функций, для работы со структурой GiST. Они, в свою очередь, манипулируют тремя базовыми методами дерева: search, insert, delete.
Пользователь может контролировать само построение дерева поиска
с помощью функций union и picksplit, отвечающих за объединение и разделение узлов дерева. Функцией penalty определяется метод оценки сложности вставки новых данных. Минимизация ``пенальти’’ является показателем эффективности индексации и учитывается при перестроении дерева.
Пользователь может контролировать поиск по дереву. Решение о переходе в один из дочерних узлов принимается с помощью функции consistent.
Реализация и примеры использования GiST в PostgreSQL подробно изложены в 5. Наряду с GIST, в PostgreSQL реализованы и другие обобщенные структуры, такие как SP-GIST (Space-Partitioned GIST). Техническая документация также является хорошим и легко читаемым источником информации 6.
Литература
1 Гектор Гарсиа-Молина, Джеффри Ульман, Дженнифер Уидом, ``Системы Баз Данных’’, изд. ``Вильямс’’ 2002; в частности, гл.14 ``Многомерные и точечные индексы’’
2 Antonin Guttman, ``R-Trees: A Dynamic Index Structure for Spatial Searching’’
3 Joseph M. Hellerstein, Avi Pfeffer, ``The RD-Tree: An Index Structure for Sets’’
4 Joseph M. Hellerstein, Jeffrey F. Naughton, Avi Pfeffer, ``Generalized Search Trees for Database Systems’’, In Proceedings of the 21st International Conference on Very Large Data Bases, Zurich, Switzerland, 1995.
5 Олег Бартунов, Федор Сигаев, ``Написание расширений для PostgreSQL с использованием GiST’’, http://citforum.ru/database/postgres/gist/
6 PostgreSQL Documentation, https://www.postgresql.org/docs/
Abstract licensed under Creative Commons Attribution-ShareAlike 3.0 license
Назад