Ilia Kantor wrote:
> Насколько я понял, ключевой момент в GIST – хранение близких значений
> близко.
Угу
>
> Т.е INSERT при помощи penalty выбирает самое “близкое” значение и
> вставляет туда.
Угу-2
> Каким образом реализуется penalty/union в hstore/tsearch2 ?
>
Union - побитовое OR
penalty - в общем случае показывает насколько измениться некая мера при union
старого ключа с новым. Для R-tree - изменение площади bounding box. Для
tsearch2/hstore - просто расстояние Хемминга между новым ключом и старым. Это
мера была выбрана из нескольких по рез-татам экспериментов.
> В исходниках используется функция hemdist.. Возможно, в деле замешана
> дистанция Хэмминга..
>
> Но почему она вычисляется побитно ?..
Именно именно, разновидность дистанции Хэмминга. Грубо говоря, XOR'им два ключа
и считаем кол-во единичек в результате. Т.е. в этих модулях нулевое расстояние
имеют одинаковые ключи.
> Т.е что там происходит-то толком, и почему оно работает ?!? ;)
И tsearch2 и hstore используют Signature tree - дерево бинарных сигнатур.
Указатель на страницу имеет побитовый OR всех ключей на странице.
--
Teodor Sigaev E-mail: teodor@sigaev.ru
WWW: http://www.sigaev.ru/