Thread: Запрос к авторам GIN/GIST индексов

Запрос к авторам GIN/GIST индексов

From
Maxim Boguk
Date:
Насколько тяжело будет написать реализацию GIN/GIST индексов для полей типа Bit String Types
(http://www.postgresql.org/docs/8.3/interactive/datatype-bit.html)
для ускорения поиска через побитовые операций типа AND/OR (фактически работа с массивом флагов ускоренная индексом).

Сейчас функциональность флагов можно реализовать через hstore или intarray при желании.
Но это ведет к очень большому перерасходу места в таблицах (hstore совсем большой перерасход и в индексе и в самом поле
взависимости от длинны ключей... intarray 32х кратный  
overhead по размеру поля и наверно такой же по размеру индекса)

Заранее спасибо.


--
Maxim Boguk

Re: Запрос к авторам GIN/GIST индексов

From
Teodor Sigaev
Date:

Maxim Boguk wrote:
> Насколько тяжело будет написать реализацию GIN/GIST индексов для полей
> типа Bit String Types
> (http://www.postgresql.org/docs/8.3/interactive/datatype-bit.html)
> для ускорения поиска через побитовые операций типа AND/OR (фактически
> работа с массивом флагов ускоренная индексом).
Наскотлько велика длина BitString? И как много строк?

Для ограниченного по длине BitString (скажем, меньше 128 байт), GiST opclass
реализовать не так трудно. GIN проще - фактически, extract_* методды, которые
должны возвращать массив номеров установленных битов.


>
> Сейчас функциональность флагов можно реализовать через hstore или
> intarray при желании.
> Но это ведет к очень большому перерасходу места в таблицах (hstore
> совсем большой перерасход и в индексе и в самом поле в зависимости от
> длинны ключей... intarray 32х кратный overhead по размеру поля и наверно
> такой же по размеру индекса)
Индекс GIN будет такого же размера - момер установленного бита есть номер.


--
Teodor Sigaev                                   E-mail: teodor@sigaev.ru
                                                    WWW: http://www.sigaev.ru/

Re: Запрос к авторам GIN/GIST индексов

From
Maxim Boguk
Date:
Teodor Sigaev пишет:
>
>
> Maxim Boguk wrote:
>> Насколько тяжело будет написать реализацию GIN/GIST индексов для полей
>> типа Bit String Types
>> (http://www.postgresql.org/docs/8.3/interactive/datatype-bit.html)
>> для ускорения поиска через побитовые операций типа AND/OR (фактически
>> работа с массивом флагов ускоренная индексом).
> Наскотлько велика длина BitString? И как много строк?
>
> Для ограниченного по длине BitString (скажем, меньше 128 байт), GiST
> opclass реализовать не так трудно. GIN проще - фактически, extract_*
> методды, которые должны возвращать массив номеров установленных битов.

128байт по логике достаточно (это дает 1024 возможных флагов что более чем достаточно)

Вопрос как заставить операции AND/OR над такими полями использовать индексы?
Или проще не переопределять встроенные операции а сделать свои какие то?

Можно ли использовать hstore из 8.3 postgresql contrib как образец кода для написания подобного механизма?

--
Maxim Boguk