для одного из наших клиентов мы предоставляем систему для извлечения ближайших N ориентиров из почтового индекса пользователя.
У нас есть база данных всех доступных почтовых индексов (650 000+) с соответствующими координатами (широта и долгота), а также все 400+ ориентиров в стране.
На данный момент мы используем следующий процесс поиска ближайших N ориентиров
- Получить широту и длину выбранного почтового индекса
- Получить координаты всех ориентиров
- Заказать их по формуле географического расстояния
- Возьмите ближайшие N + 2 ориентира и получите реальное расстояние до них, используя следующий процесс
- проверить, хранится ли расстояние между координатами в таблице кэша расстояний
- если нет, то идет к движку карты, извлекает расстояние и сохраняет его в кеше
- Изменить порядок списка и вернуть первые N ближайших ориентиров
Проблема в том, что нам нужно оптимизировать это как с точки зрения доступа к базе данных, так и со стороны третьих лиц.
Мы пытались кэшировать для всех почтовых индексов расстояние до ближайших ориентиров М, но таблица получит дополнительные 6 ГБ данных, и заполнение займет около 250 дней, поскольку запрос занимает примерно 30 секунд.
Мы думали о разделении данных и группировании близких почтовых индексов, но это приведет к потере точного расстояния.
Какие оптимизирующие решения вы видите в этой ситуации.
Спасибо.