Поиск постов, где расстояние до позиции меньше или равно динамическому значению - PullRequest
1 голос
/ 07 декабря 2011

Мне нужна помощь с архитектурной проблемой, с которой я работаю.Пользователь вводит позицию и радиус (например, расстояние).Программное обеспечение ищет в таблице базы данных (гигант = пара из 100 000 сообщений) сообщения, в которых местоположение пользователей и расстояние между ними меньше, чем введенное расстояние.

Мне довольно сложнообъясните, но представьте себе таблицу с двумя сообщениями, точка а и точка с, точка U - местоположение пользователя.Пользователь ввел позицию и радиус, а позиция и радиус для a и c предопределены (сохраняются в базе данных).

Crossmatching areas

В этом случае я будуинтересует точка А, потому что две области пересекаются друг с другом.Как я должен преобразовать это в работу в базе данных с парой сотен тысяч постов эффективным способом?В базе данных я буду хранить долготу, широту и радиус.

1 Ответ

2 голосов
/ 07 декабря 2011

Зависит от того, какой сервер базы данных вы используете, но посмотрите на возможности ГИС, которые могут быть включены. Например, MS SQL Server 2008 имеет встроенный тип геометрии, а PostgreSQL имеет PostGIS. У Oracle тоже есть что-то подобное. В любом случае - эти собственные ГИС-форматы поставляются с пространственными функциями запросов, которые выполняют то, о чем вы говорите - поиск совпадений на заданных расстояниях и т. Д. Довольно просто выполнить один раз, чтобы переключиться на правильный тип данных.

редактировать

Поскольку вы используете SQL 2008, а ваши данные имеют широту / длину, я предлагаю тип данных "география", а не "геометрия". Взгляните сюда: http://msdn.microsoft.com/en-us/library/cc280766.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...