redis - 如何在 Redis 中管理和保存 IoT 设备日志,以便日后高效使用
问题描述
我在一家专门从事汽车物联网设备的公司工作。这些设备安装在汽车中,当汽车开始工作时,它们每秒都会发送一个包含汽车信息的日志。我们使用 MQTT 作为我们日志的代理...
我正在开发一个微服务,它从 MQTT 服务器中挑选日志,然后应该执行以下操作:对于每个设备,它应该在我们数据库的表中创建一行(如果尚未创建),其中包含这辆车(设备)的工作量。我的意思是多少时间它已经运行了多少时间,它已经走了多远。
现在到这里一切似乎都很简单,但问题是设备可能会失去与互联网的连接并且不会立即发送日志。设备如何将日志保存在其内存中,并且每当它重新上线时,它都会在新的数据之间发送旧数据一次,因此,例如,如果它在上午 11 点开始并在下午 1 点重新上线,那么模式就像这个:
- 上午 11 点日志(旧日志)
- 凌晨 1 点日志(当前日志)
- 上午 11 点日志(旧日志)
- 凌晨 1 点日志(当前日志)
- 上午 11 点日志(旧日志)
- 凌晨 1 点日志(当前日志)...
一天的日志可能会在另一天发送等等......
由于每秒有这么多设备和这么多日志,我们无法在每次收到日志时访问数据库,因此我们需要redis
更快地存储数据,并且每隔几秒我们从redis
. 很明显,每个收到的日志都代表1 second
工作,但我真正的问题是计算每辆车行驶的距离!为此,我们需要来自同一辆车的两个连续日志,以便我们可以找到distance delta
. 考虑到汽车的日志很可能是混合的,我在处理数据方面面临着一些真正的挑战。
目前我正在 Redis 中保存一个键值对,其键如下所示:deviceid:-:date
并且值包含total distance/time
加上一些其他信息。实际上,我为我们收到的每个在线设备存储了一个键值对表单,而这date
正是该date of sending
日志的。正如您所看到的,这种方法无助于找到行进的距离,而且由于我无法存储所有日志,我真的不知道该怎么办......
我认为的一种方法是sorted-set
在任何日期为每辆在线汽车保留一个,在该集合中,我使用日志的时间戳作为日志,score
以便以逻辑顺序形式对日志进行排序。每一个我都不知道从哪里开始以及如何有效地计算我需要的数据。
如果有帮助,我们将使用它golang
作为我们的主要语言。对不起我的英语不好。任何想法或帮助将不胜感激。谢谢
解决方案
推荐阅读
- html - 查询参数传递给 onFormSubmit 触发器的函数
- ruby - 将 2 Hash 与由数组组成的值进行比较
- docusignapi - 来自 VSCode 的 GitHub 克隆 eg-02-react-implicit-grant 错误 /src/hoc/aux 无效参数
- python - 在python中代码拼字游戏作弊器时添加通配符
- sql - 在同一列中查找多个元素的最大值
- ios - 登录后在“didInitiate”函数中访问 ViewController UI
- python-2.7 - 将文件写入和读取合并在一起
- mysql - SQL - 如何找到包含时间戳的同一列的两行之间的差异
- java - 为什么 driver.findElement 在 safari 12.2 中导致 java.lang.nullpointerexception null
- java - GridPane JavaFX8 中未出现按钮