Эффективный поиск ближайших географических местоположений

Я искал на SO и не нашел ответа на этот вопрос, но это похоже на обычную проблему.

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

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

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

5
задан user98978979 17 October 2010 в 21:10
поделиться