Thread: Запрос к авторам GIN/GIST индексов
Насколько тяжело будет написать реализацию 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
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/
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