9
Метод доступа gist
Сбалансированное дерево, общий предикат
API метода доступа определяет, что представляет собой предикат
Однако не все типы данных сортируемы. Например, не имеют
естественной упорядоченности такие типы, как геометрические фигуры
(точки, прямоугольники и т. п.), диапазоны, массивы и т. п. Это не
значит, что для таких типов данных нельзя определить операции
сравнения, но практической пользы от них будет немного. Важнее
уметь использовать индексы, например, для поиска точек, входящих
в заданную область, или поиска элементов, входящих в массив, т. е.
для операторов, отличных от «больше», «меньше» и т. п.
B-дерево здесь не годится, но идею индексирования с помощью
сбалансированного дерева можно обобщить. Пусть для каждого
поддерева определено условие (предикат), которому удовлетворяют
все данные, попадающие в это поддерево. Тогда предикат можно
использовать для определения, в какое поддерево (в общем случае —
несколько поддеревьев) нужно спускаться при поиске.
Проще всего представить себе такой GiST-индекс на примере точек.
В этом случае предикатом выступает охватывающий прямоугольник,
а структура называется R-деревом. На рисунке она изображена
схематично. Верхний уровень представлен большим прямоугольником,
охватывающем все проиндексированные точки. На втором уровне
видим два меньших прямоугольника, на нижнем — еще более мелкие.
Суммарно все прямоугольники нижнего уровня охватывают все точки.
Такую же структуру можно построить и для диапазонных типов.
Класс операторов для GiST определяет, как выглядит предикат, и еще
многие детали, необходимые для эффективной работы.