Эффективно искать ближайшие географические местоположения - PullRequest
5 голосов
/ 18 октября 2010

Я искал в SO и не нашел ответа на этот вопрос, но это кажется общей проблемой.

У меня есть несколько сотен тысяч местоположений в базе данных, каждое из которых имеет геокод (широта / долгота),Если это имеет значение, они распространены по всей территории США. Теперь у меня есть клиентское приложение, в котором я хочу, чтобы пользователи указывали свои широту / долготу и радиус (скажем, 5mi, 10mi, 25mi и т. Д.), И я хочу вернуть всезаписи, которые соответствуют.Меня волнует только значение расстояния, которое можно получить, скажем, по формуле Хаверсайна, а не кратчайшее расстояние.Однако, учитывая это, я хочу, чтобы она была максимально точной.

Эта база данных в основном доступна только для чтения.В хороший день может быть 10 вставок.Теперь у меня будут сотни клиентов, возможно, десятки тысяч клиентов, которые будут использовать программное обеспечение.Я хочу, чтобы пользователи получали результаты в течение нескольких секунд, но если один запрос занимает 10-20 секунд, он будет сканироваться при попадании с нагрузкой клиентов.

Как мне обслуживать результаты максимально эффективно?Я знаю, что могу просто сохранить их в MySQL или PostgreSQL (Oracle и MS SQL Server для этого не нужны, но может пригодиться и другое хранилище данных с открытым исходным кодом) и просто вставить формулу Haversine в предложение WHERE, но я не думаю, чтособирается дать эффективные результаты.

Ответы [ 3 ]

2 голосов
/ 18 октября 2010

PostgreSQL поддерживает широкий спектр геопространственных запросов, если на нем установлены расширения PostGIS . Поиск по ближайшему или радиусному или ограничительному полю особенно прост.

1 голос
/ 15 декабря 2010

Я использовал Solr (сервер поиска на основе Lucene) для поиска по радиусу. Мы написали портал свойств, который позволяет пользователю искать свойства по радиусу.

Мы индексируем базу данных, поэтому поиск будет очень быстрым.

0 голосов
/ 18 октября 2010

Я начинаю чувствовать себя официальным представителем для Сфинкс .В этой статье объясняется, как настроить его для геопространственного поиска: http://www.god -object.com / 2009/10/20 / geospatial-search-using-sphinx-search-and-php /

Чтобы уточнить: данные будут храниться в mysql / postgres, но проиндексированы и найдены в Sphinx.

...