问题描述
我实现了一个与Bolt和Uber类似的应用程序,我正在寻找最佳的解决方案来持久保存活动驱动程序的坐标。
客户端(iOS和Android应用程序)每5秒发送一次坐标(纬度和经度),并且必须在服务器(Spring Boot应用程序)上进行更新,以便将其显示在潜在乘客的地图上
我的第一个解决方案是Redis。我已经将它用于令牌吊销(JWT身份验证),并且我正考虑扩展它以存储每个驱动程序的位置,因为与关系数据库相比,它非常快,但是问题是我不认为Redis提供了复杂的功能。足够的数据检索方法(如sql),因此当我要计算乘客附近的所有驾驶员时,可能会给业务层增加不必要的复杂性。
第二种解决方案是将坐标存储在关系数据库中。在这里,我将使用复杂的方法来使用sql提取数据,但是速度较慢。由于我考虑每5秒更新一次驱动程序的位置,因此我认为这不是最佳解决方案。
您认为此用例的最佳架构是什么?
解决方法
我会提出一些想法。
首先,我们不知道每5秒发送多少座标。如果有几个应用程序,则可以将它们直接存储在db中,直到开始影响db的写延迟。
如果没有大量的应用发送坐标,则可以将其存储在Redis中。重复使用Redis,这样就不会丢失任何数据。 定期从Redis读取并转储到数据库中。
您没有提到要对坐标执行哪种查询。
我的猜测,
- 如果要显示汽车的先前位置轨迹,则可以将此数据存储在客户端。
- 如果您想在活跃应用程序很多的地方忙个不停,那么您可以从Redis中读取它。执行计算并将结果存储在存储,CDN等中。同时,将数据保留在db中。
数据库选择可以是MongoDB或Postgres。但这取决于您的用例。