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

Lists: pgsql-ru-general
From: Maxim Boguk <mboguk(at)masterhost(dot)ru>
To: pgsql-ru-general(at)postgresql(dot)org
Subject: Запрос к авторам GIN/GIST индексов
Date: 2008-03-03 12:19:02
Message-ID: 47CBECB6.4010003@masterhost.ru
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-ru-general

Насколько тяжело будет написать реализацию 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


From: Teodor Sigaev <teodor(at)sigaev(dot)ru>
To: Maxim Boguk <mboguk(at)masterhost(dot)ru>
Cc: pgsql-ru-general(at)postgresql(dot)org
Subject: Re: Запрос к авторам GIN/GIST индексов
Date: 2008-03-03 18:59:24
Message-ID: 47CC4A8C.5040901@sigaev.ru
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: Postg사설 토토SQL : Postg사설

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(at)sigaev(dot)ru
WWW: http://www.sigaev.ru/


From: Maxim Boguk <mboguk(at)masterhost(dot)ru>
To: Teodor Sigaev <teodor(at)sigaev(dot)ru>
Cc: pgsql-ru-general(at)postgresql(dot)org
Subject: Re: Запрос к авторам GIN/GIST индексов
Date: 2008-03-04 13:32:48
Message-ID: 47CD4F80.8080405@masterhost.ru
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-ru-general

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