Всем доброго времени суток!
Я участвую в разработке высоконагруженной системы, значительную часть данных которой составляют географические координаты (пара latitude, longitude, в градусах, точность - 0.00001 градуса).
Проект спроектирован по микросервисной архитектуре.
В системе есть несколько таблиц (сущностей), для которых организован gps-трекинг. Геокоординаты складываются в таблицы, ассоциированные с этими сущностями (тек. момент - 2). Запросов на добавление геокоординат- 5 млн/минуту, для каждой сущности.
Текущая задача, состоит в том, чтобы считать статистику по нескольким показателям, сгруппированных относительно геокоординат. Причем статистика должна иметь возможность фильтрации по всем полям (в том числе по геокоординатам, в том числе по радиусу в км, относительно искомой геокоординаты).
В данный момент, на каждый «отчет» статистики создана своя таблица. Базой выбрана PostgreSQL, с расширением PostGis. Для таблиц статистических «отчетов», назначены индексы GiST. Они позволяют быстро фильтровать геокоординаты относительно искомой геокоординаты (Index Scan). Данные в таблицах статистических «отчетов» пересчитываются по таймеру.
Нормально ли вообще текущее существующее решение. Можно ли с ним будет работать далее? Или пересчитывать что-то по таймеру, с такими объемами данных - очень плохо? Вообще альтернативы я не вижу, кэширование мне кажется, тут не подходит тоже.