67.1. Введение#

67.1. Введение

67.1. Введение #

GIN означает Generalized Inverted Index. GIN предназначен для обработки случаев, когда элементы, которые должны быть проиндексированы, являются составными значениями, и запросы, которые должны обрабатываться индексом, должны искать значения элементов, которые появляются в составных элементах. Например, элементами могут быть документы, а запросами могут быть поиски документов, содержащих определенные слова.

Мы используем слово элемент для обозначения составного значения, которое должно быть проиндексировано, и слово ключ для обозначения значения элемента. GIN всегда хранит и ищет ключи, а не сами значения элементов.

Индекс GIN хранит набор пар (ключ, список позиций), где список позиций - это набор идентификаторов строк, в которых встречается ключ. Один и тот же идентификатор строки может появляться в нескольких списках позиций, поскольку элемент может содержать более одного ключа. Каждое значение ключа хранится только один раз, поэтому индекс GIN очень компактен в случаях, когда один и тот же ключ встречается много раз.

GIN обобщен в том смысле, что код метода доступа GIN не должен знать о конкретных операциях, которые он ускоряет. Вместо этого он использует пользовательские стратегии, определенные для конкретных типов данных. Стратегия определяет, как извлекаются ключи из индексированных элементов и условий запроса, а также как определить, удовлетворяет ли строка, содержащая некоторые из значений ключей в запросе, самому запросу.

Одним из преимуществ GIN является возможность разработки пользовательских типов данных с соответствующими методами доступа, экспертом в области данного типа данных, а не экспертом баз данных. Это во многом схожее преимущество с использованием GiST.

Реализация GIN в Tantor BE в основном поддерживается Федором Сигаевым и Олегом Бартуновым. Больше информации о GIN можно найти на их веб-сайте.