保持服务器上每5秒钟接收一次的GPS坐标的最佳解决方案?

问题描述

我实现了一个与Bolt和Uber类似的应用程序,我正在寻找最佳的解决方案来持久保存活动驱动程序的坐标。

客户端(iOS和Android应用程序)每5秒发送一次坐标(纬度和经度),并且必须在服务器(Spring Boot应用程序)上进行更新,以便将其显示在潜在乘客的地图上

我的第一个解决方案是Redis。我已经将它用于令牌吊销(JWT身份验证),并且我正考虑扩展它以存储每个驱动程序的位置,因为与关系数据库相比,它非常快,但是问题是我不认为Redis提供了复杂的功能。足够的数据检索方法(如sql),因此当我要计算乘客附近的所有驾驶员时,可能会给业务层增加不必要的复杂性。

第二种解决方案是将坐标存储在关系数据库中。在这里,我将使用复杂的方法来使用sql提取数据,但是速度较慢。由于我考虑每5秒更新一次驱动程序的位置,因此我认为这不是最佳解决方案。

您认为此用例的最佳架构是什么?

解决方法

我会提出一些想法。

首先,我们不知道每5秒发送多少座标。如果有几个应用程序,则可以将它们直接存储在db中,直到开始影响db的写延迟。

如果没有大量的应用发送坐标,则可以将其存储在Redis中。重复使用Redis,这样就不会丢失任何数据。 定期从Redis读取并转储到数据库中。

您没有提到要对坐标执行哪种查询。

我的猜测,

  • 如果要显示汽车的先前位置轨迹,则可以将此数据存储在客户端。
  • 如果您想在活跃应用程序很多的地方忙个不停,那么您可以从Redis中读取它。执行计算并将结果存储在存储,CDN等中。同时,将数据保留在db中。

数据库选择可以是MongoDB或Postgres。但这取决于您的用例。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...