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

Architecture 保持服务器上每5秒接收一次GPS坐标的最佳解决方案?,architecture,persistence,Architecture,Persistence,我实现了一个类似于Bolt和Uber的应用程序,我正在寻找最好的解决方案来保持活动驱动程序的坐标 客户端(iOS和Android应用程序)每5秒发送一次坐标(纬度和经度),并且必须在服务器(Spring Boot应用程序)上更新坐标,以便在潜在乘客的地图上显示它们 我的第一个解决方案是Redis。我已经将其用于令牌撤销(JWT身份验证),并考虑将其扩展以存储每个驱动程序的位置,因为与关系数据库相比,它非常快,但问题是我认为Redis没有提供足够复杂的数据检索方法(如SQL)因此,当我想要计算乘客

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

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

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

第二种解决方案是将坐标存储在关系数据库中。在这里,我使用SQL获取数据的方法很复杂,但速度较慢。由于我考虑每隔5秒更新每个驱动程序的位置,我认为这不是最好的解决方案。
您认为这个用例的最佳架构是什么?

我将提出一些想法

首先,我们不知道每5秒有多少个应用程序会发送坐标。如果它是一对应用程序,那么您可以直接将它们存储在db中,直到它开始影响您的db写入延迟

如果没有大量发送坐标的应用程序,那么您可以先将它们存储在Redis中。将Redis与Replication一起使用,这样就不会丢失任何数据。 定期从Redis读取并转储到数据库中

您没有提到您正在对坐标执行什么类型的查询

我猜

  • 如果您想显示汽车的前一个位置轨迹,那么您可以将此数据存储在客户端
  • 如果你想在热点地区使用大量活跃的应用程序,那么你可以从Redis上阅读。同时执行计算并将结果存储在存储器、CDN等中,将备份数据保存在db中
数据库选择可以是MongoDB或Postgres。但这将取决于您的用例