индексирование по расстоянию

From: "Dmitry E(dot) Oboukhov" <unera(at)debian(dot)org>
To: pgsql-ru-general(at)postgresql(dot)org
Subject: индексирование по расстоянию
Date: 2014-05-09 20:42:52
Message-ID: 20140509204252.GM15103@vdsl.uvw.ru
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-ru-general

объявлен свой тип данных

mytype(a,b,c) (a,b,c - текстовые и числовые переменные)

Далее есть таблица

id, mytype, col1, col2, итп

Далее

От пользователя приходит объект mytype. Надо выбрать все объекты по
некоторым критериям подходящие наиболее близко к объекту mytype.

Для этого реализовали алгоритм, который возвращает число с плавающей
точкой на два объекта mytype.

это число характеризует "близость" двух объектов

чем меньше число - тем "ближе" объекты друг к другу.
Сунули этот алгоритм в функцию

DOUBLE my_dist(mytype, mytype)

Далее можно объявить оператор дистанции между двумя типами <->

Ну и далее можно написать запрос

SELECT
*
FROM
table t
ORDER BY
users_input::mytype <-> t.mytype

Вот с этого места постгрис стал отвечать на вопрос "дай мне n объектов
ближайших к тому что задал юзер"

Теперь хочу заставить постгрис это дело как-то индексировать.
сходу ничего подходящего не нашел.

Сейчас залез копаться в GIST-индексы и расширения на C, но возник
вопрос, может быть уже что-то готовое есть на тему решения подобных
задач?
то есть если у нас есть функция возвращающая дистанцию между двумя
объектами, то может быть можно просто (без C-программирования)
построить индекс отвечающий на
вопрос "дай мне ближайшие объекты к заданному"?

база данных по факту планируется практически ro (редко меняющийся
справочник), объема большого (несколько млн записей), поэтому
индексирование необходимо
--

. ''`. Dmitry E. Oboukhov
: :’ : email: unera(at)debian(dot)org jabber://UNera(at)uvw(dot)ru
`. `~’ GPGKey: 1024D / F8E26537 2006-11-21
`- 1B23 D4F8 8EC0 D902 0555 E438 AB8C 00CF F8E2 6537

Responses

Browse pgsql-ru-general by date

  From Date Subject
Next Message Sergey Konoplev 2014-05-09 21:02:19 Re: [pgsql-ru-general] индексирование по расстоянию
Previous Message Dmitry E. Oboukhov 2014-05-09 20:22:19 Отладка расширений Pg (C)