Сложный поиск объектов в базе
От: _DeKa_ Беларусь  
Дата: 23.12.11 14:49
Оценка:
Добрый день всем!

У меня возникла следующая проблема: есть множество некоторых объектов. У каждого объекта есть некоторая информация о нем + достаточно большой (около 1000) массив чисел, который и характеризизует данный объект (некий внутренний дескриптор, отражающий форму объекта). Два объекта можно сравнить между собой, используя их дескрипторы, с помощью некой метрики (для простоты обычное евклидово расстояние). Надо реализовать следующее: от клиентской части приходит запрос в виде дескриптора. Серверная часть должна просмотреть все объекты и выдать обратно список объектов упорядоченный по увеличению расстояния до запроса (первые N элементов). Сразу скажу, что все числа в дескрипторе равнозначны и врядли можно придумать какой-то индекс для них. Они по сути сами являются индексом для формы объекта.

Т.е. в псевдокоде хочется получить что-то вроде: SELECT first N FROM table ORDER BY distance_to(query)

Собственно вопрос: как лучше это реализовать, если хранить дескрипторы в базе (а не просто в памяти). СУБД — пока что SQLite, но в дальнейшем возможен переход на MSSQL. Объектов в базе при среднем использовании 20-50.000 Но должно работать с приемлимой скоростью и на 100.000 объектов. Приемлимая скорость это 1-2 секунды для одного запроса при 20.000 объектов. И какие механизмы можно использовать для решения проблемы (хранимые процедуры, курсоры и т.д.)? Или все-таки самым простым выходом будет при инициализации приложения выбрать все дескрипторы в память и самому искать по ним? И кстати, какой расход памяти будет при использовании SQLite в таком случае? Ведь декрипторы будут и у меня в памяти и в базе.

Заранее спасибо за ответы!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.