LINUX.ORG.RU

Aрхитектурное решение для хранения и работы с данными геокоординат при высоких нагрузках?

 ,


0

2

Всем доброго времени суток!

Я участвую в разработке высоконагруженной системы, значительную часть данных которой составляют географические координаты (пара latitude, longitude, в градусах, точность - 0.00001 градуса).

Проект спроектирован по микросервисной архитектуре.

В системе есть несколько таблиц (сущностей), для которых организован gps-трекинг. Геокоординаты складываются в таблицы, ассоциированные с этими сущностями (тек. момент - 2). Запросов на добавление геокоординат- 5 млн/минуту, для каждой сущности.

Текущая задача, состоит в том, чтобы считать статистику по нескольким показателям, сгруппированных относительно геокоординат. Причем статистика должна иметь возможность фильтрации по всем полям (в том числе по геокоординатам, в том числе по радиусу в км, относительно искомой геокоординаты).

В данный момент, на каждый «отчет» статистики создана своя таблица. Базой выбрана PostgreSQL, с расширением PostGis. Для таблиц статистических «отчетов», назначены индексы GiST. Они позволяют быстро фильтровать геокоординаты относительно искомой геокоординаты (Index Scan). Данные в таблицах статистических «отчетов» пересчитываются по таймеру.

Нормально ли вообще текущее существующее решение. Можно ли с ним будет работать далее? Или пересчитывать что-то по таймеру, с такими объемами данных - очень плохо? Вообще альтернативы я не вижу, кэширование мне кажется, тут не подходит тоже.

узкое место - очевидно база. микросервисы можно спокойно выкинуть, их масштабирование все равно никакого профита не принесёт. базу шардировать. при необходимости - прикрутить к ней in-memory кэш, вроде того же coherence. таймер можно и оставить, хотя разумнее - свести время пересчитывания к минимуму за счёт того же шардирования и кэша и пересчитывать при обращениии

anonymous
()

Данные в таблицах статистических «отчетов» пересчитываются по таймеру

Всегда стараюсь такие вычисления делать «на лету». Т.е. формировать по мере поступления данных. Но не всякий алгоритм можно так преобразовать, конечно.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.