Введение

В вычислительной технике, GiST (Generalized Search Tree) или обобщённое дерево поиска, — это структура данных и API, которые можно использовать для создания различных дисковых деревьев поиска. GiST является обобщением B+-дерева, предоставляющего конкурентную и восстанавливаемую, сбалансированную по высоте инфраструктуру дерева поиска, не делая никаких предположений о типе хранимых данных или обрабатываемых запросах. GiST может быть использован для простой реализации широкого спектра известных индексов, включая B+-деревья, R-деревья, hB-деревья, RD-деревья и многие другие; он также позволяет легко разрабатывать специализированные индексы для новых типов данных. Он не может быть использован напрямую для реализации несбалансированных по высоте деревьев, таких как квадродеревья или префиксные деревья (три), хотя, как и префиксные деревья, он поддерживает сжатие, включая сжатие с потерями. GiST может использоваться для любого типа данных, который можно естественным образом упорядочить в иерархию супермножеств. Он расширяем не только в отношении поддержки типов данных и структуры дерева, но и позволяет разработчику расширения поддерживать любые выбранные им предикаты запросов. GiST является примером расширяемости программного обеспечения в контексте систем баз данных: он позволяет легко развивать систему баз данных для поддержки новых индексов, основанных на деревьях. Это достигается за счёт отделения основной инфраструктуры системы от узкого API, достаточного для охвата специфических аспектов применения широкого спектра конструкций индексов. Код инфраструктуры GiST управляет структурой индексных страниц на диске, алгоритмами поиска и удаления из индексов, а также сложными деталями транзакций, такими как блокировка на уровне страниц для обеспечения высокой конкуренции и предварительная запись журнала для восстановления после сбоев. Это позволяет авторам новых индексов, основанных на деревьях, сосредоточиться на реализации новых функций нового типа индекса — например, способа описания подмножеств данных для поиска — без необходимости становиться экспертами во внутреннем устройстве систем баз данных. Хотя изначально GiST был разработан для ответа на булевы запросы отбора, он также может поддерживать поиск ближайших соседей и различные формы статистического приближения для больших наборов данных.

Реализация

Наиболее широко используемая реализация GiST присутствует в реляционной базе данных PostgreSQL; она также была реализована в Informix Universal Server и в виде автономной библиотеки libgist.