概述
我目前正在建造一个原型来跟踪和控制一支无人机舰队。
原型由一个服务和一个web应用程序组成。在web应用程序中,每个无人机的位置在地图上实时显示,用户可以向每个无人机发出基本命令。该服务是自动化的,并且可以在某些情况下随机地向每个无人机发出命令。
我正在使用HiveMQ (一个MQTT代理)来促进无人机、网络应用程序和服务之间的通信。web应用程序和服务都订阅了“遥测”主题,以接收关于无人机网络的实时数据。代理将通过使用HiveMQ的扩展功能将每个无人机的遥测数据直接存储到数据库中。
只有在满足某些条件时才能执行特定的命令。
例如:要向无人驾驶飞机发出“执行任务”命令,服务或网络应用程序将调用API。空气污染指数将:
(“任务”--我指的是无人驾驶飞机自主地飞到一系列固定的地点。)
如果没有满足条件,将返回给请求者(web应用程序或服务)一个指示这一点的响应。如果满足条件,API将通过MQTT代理向适当的无人机发出命令,并向请求者发送响应。
需求
我需要一个符合以下条件的存储机制:
考虑了解决方案
我的解决方案是关系数据库--使用带有“request_lock”字段的单独表,该字段使用行级锁。
当进行API调用时,它会检查此字段是否为真,如果为真则拒绝请求。如果为false,则将字段设置为true,执行必要的条件检查,然后在命令到达无人机后将'request_lock‘字段设置为false。
我担心来自每个无人机的状态更新频率不符合关系数据库模型,并且不会很好地扩展。我是在正确的轨道上,还是应该以某种方式包括一个NoSQL数据库来处理状态更新?
谢谢任何花时间回答的人。
发布于 2021-06-08 16:25:53
这里有很多问题,所以我试着挑选一些似乎最重要的问题:
我担心每个无人机的状态更新频率不符合关系数据库模型。
我应该使用关系数据库还是非关系数据库?
首先,让我们计算每秒无人机状态更新的最大数量。
无人机将每秒钟更新一次状态,API调用的sic发出命令将每10-30秒进行一次。在这个原型中将有5架无人机,但我想要一个可以扩展到50架无人机的解决方案。
因此,关系数据库可以每秒处理60次查询吗?。
是。假定合理的查询复杂性,这是在传统关系数据库的能力范围内进行的。我也不期望数据库需要非凡的系统资源。
如果您想用基准测试来确认这种性能水平,我建议您使用像pgbench这样的工具。
https://stackoverflow.com/questions/67890477
复制相似问题