首页 > 解决方案 > 如何在 Redis 中管理和保存 IoT 设备日志,以便日后高效使用

问题描述

我在一家专门从事汽车物联网设备的公司工作。这些设备安装在汽车中,当汽车开始工作时,它们每秒都会发送一个包含汽车信息的日志。我们使用 MQTT 作为我们日志的代理...
我正在开发一个微服务,它从 MQTT 服务器中挑选日志,然后应该执行以下操作:对于每个设备,它应该在我们数据库的表中创建一行(如果尚未创建),其中包含这辆车(设备)的工作量。我的意思是多少时间它已经运行了多少时间,它已经走了多远。


现在到这里一切似乎都很简单,但问题是设备可能会失去与互联网的连接并且不会立即发送日志。设备如何将日志保存在其内存中,并且每当它重新上线时,它都会在新的数据之间发送旧数据一次,因此,例如,如果它在上午 11 点开始并在下午 1 点重新上线,那么模式就像这个:

一天的日志可能会在另一天发送等等......


由于每秒有这么多设备和这么多日志,我们无法在每次收到日志时访问数据库,因此我们需要redis更快地存储数据,并且每隔几秒我们从redis. 很明显,每个收到的日志都代表1 second工作,但我真正的问题是计算每辆车行驶的距离!为此,我们需要来自同一辆车的两个连续日志,以便我们可以找到distance delta. 考虑到汽车的日志很可能是混合的,我在处理数据方面面临着一些真正的挑战。
目前我正在 Redis 中保存一个键值对,其键如下所示:deviceid:-:date并且值包含total distance/time加上一些其他信息。实际上,我为我们收到的每个在线设备存储了一个键值对表单,而这date正是该date of sending日志的。正如您所看到的,这种方法无助于找到行进的距离,而且由于我无法存储所有日志,我真的不知道该怎么办......


我认为的一种方法是sorted-set在任何日期为每辆在线汽车保留一个,在该集合中,我使用日志的时间戳作为日志,score以便以逻辑顺序形式对日志进行排序。每一个我都不知道从哪里开始以及如何有效地计算我需要的数据。
如果有帮助,我们将使用它golang作为我们的主要语言。对不起我的英语不好。任何想法或帮助将不胜感激。谢谢

标签: redisiot

解决方案


推荐阅读