Задать вопрос

Серверная часть для трекингового приложения. Как корректно сделать?

Добрый день !

Появилась необходимость сделать мобильное приложение, которое будет слать на сервер свое положение(трекер). Данные будут слаться "как только изменились", т.е. при движении постоянно, очень часто.
Возник вопрос, как сделать корректно серверную часть.

Проблемы, которые предвидятся:
Данные шлются много и постоянно. С другого приложения надо будет отслеживать перемещение "телефона-маячка", по этому складывать данные в sql таблицу в кучу, а потом забирать последнее положение - может оказаться слишком долго.

Придумалось решение - на одного "маячка" завести поле с текущими его координатами и обновлять.

Хотелось бы услышать мнение людей, которые с этим сталкивались. Может быть есть другие более корректные решение, какие-то специальные структуры и другие способы создания таких систем. Может стоит использовать не sql, а, скажем, mongoDB ? Или есть какой-то особый способ организации данных.

Спасибо !
  • Вопрос задан
  • 559 просмотров
Подписаться 7 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
@azShoo
Первое. Для хранение координат, и их истории (т.е. банальная связка device_id:coords) смысла использовать RDBMS - ноль.
Только нереляционные базы данных. Монга, упомянутая, отлично подходит.
Я бы сделал отдельную таблицу\коллекциюс актуальным(последним) положением девайса и отдельную таблицу\коллекциюс историей координат по девайсам.
Таким образом для отображения текущего положения пользователя и\или проверки на то, изменил он своё положение или нет - смотрим последнее актуальное состояние по ключу, а для построения маршрутов и прочих историй требующих более одной точки - лезем в коллекцию с выборкой по оному.
Коллекция актуальных состояний всегда будет равна количеству трекаемых девайсов, а историю можно шардировать, партиционировать как душе угодно в зависимости от объемов данных.

Второе.
Как делать.
Ну, очередь на отправку на клиенте, ожидающая удачного коннекта и "запоминающая" последнее сочетание координаты + таймстэмп на последний синк с сервером.
Очередь на приём с последующей обработкой и перезаписью в базу на стороне сервера.
Ну, и система гарантированной доставки в режиме пинг-понг через сокеты.

На правильность не претендую, но я на мой взгляд это разумное соотношение сложность\качество.
Ответ написан
Комментировать
Посмотрите Кассандру. Вот как раз ваш случай использования. Для не-серийных данных советую использовать обычную SQL-базу.
Ответ написан
Комментировать
begemot_sun
@begemot_sun
Программист в душе.
Делается просто. Не на PHP.
Пока есть постоянный коннект с телефоном, последняя координата хранится в памяти.
В базу пишем не сразу, а пачками. Можно прореживать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы