Я искал в SO и не нашел ответа на этот вопрос, но это кажется общей проблемой.
У меня есть несколько сотен тысяч местоположений в базе данных, каждое из которых имеет геокод (широта / долгота),Если это имеет значение, они распространены по всей территории США. Теперь у меня есть клиентское приложение, в котором я хочу, чтобы пользователи указывали свои широту / долготу и радиус (скажем, 5mi, 10mi, 25mi и т. Д.), И я хочу вернуть всезаписи, которые соответствуют.Меня волнует только значение расстояния, которое можно получить, скажем, по формуле Хаверсайна, а не кратчайшее расстояние.Однако, учитывая это, я хочу, чтобы она была максимально точной.
Эта база данных в основном доступна только для чтения.В хороший день может быть 10 вставок.Теперь у меня будут сотни клиентов, возможно, десятки тысяч клиентов, которые будут использовать программное обеспечение.Я хочу, чтобы пользователи получали результаты в течение нескольких секунд, но если один запрос занимает 10-20 секунд, он будет сканироваться при попадании с нагрузкой клиентов.
Как мне обслуживать результаты максимально эффективно?Я знаю, что могу просто сохранить их в MySQL или PostgreSQL (Oracle и MS SQL Server для этого не нужны, но может пригодиться и другое хранилище данных с открытым исходным кодом) и просто вставить формулу Haversine в предложение WHERE, но я не думаю, чтособирается дать эффективные результаты.