我在一家专门生产汽车物联网设备的公司工作。这些设备安装在汽车上,当汽车开始工作时,它们每秒钟都会发送一个包含汽车信息的日志。我们使用mqtt作为日志的代理。。。
我正在开发一个微型服务,它从mqtt服务器中提取日志,然后应该执行以下操作:对于每个设备,它应该在数据库(如果尚未创建)的表中创建一行,其中包含这辆车(设备)的工作情况。我指的是它已经走了多少时间,走了多少距离。
到目前为止,一切似乎都很简单,但问题是,有可能一个设备失去了与互联网的连接,无法立即发送日志。设备如何在内存中保存日志,当它再次联机时,它会将较旧的数据发送到较新的数据之间,因此,例如,如果它在上午11点开始,下午1点重新联机,则模式如下:
上午11点日志(旧日志)
1 am日志(当前日志)
上午11点日志(旧日志)
1 am日志(当前日志)
上午11点日志(旧日志)
1 am日志(当前日志)。。。
有可能一天的日志会在另一天发送,以此类推。。。
由于每秒有这么多设备和这么多日志,我们无法在每次收到日志时访问数据库,因此我们有一个 redis
为了更快地存储数据,每隔几秒钟我们就会从 redis
. 很明显,每个接收到的日志代表 1 second
当然,但我真正的问题是计算每辆车行驶的距离!为此,我们需要两个连续的日志从同一辆车,以便我们可以找到 distance delta
. 考虑到一辆车的日志很可能是混合的,我在处理数据方面面临着一些真正的挑战。
目前,我正在redis中保存一个键值对,其键值如下所示: deviceid:-:date
值包含 total distance/time
再加上一些其他信息。实际上,我有一个键值对存储在每个在线设备上,我们正在接收表单和 date
正是 date of sending
那根木头。正如你所见,这种方法无助于找到旅行的距离,因为我不能存储所有的日志,我真的不知道该怎么办。。。
我想的一个办法是 sorted-set
对于任何日期的每一辆在线汽车,在该集合中,我使用日志的时间戳作为 score
以便日志按逻辑顺序排列。我不知道如何从这里开始,如何有效地计算我需要的数据。
如果有用的话,我们正在使用 golang
作为我们的主要语言。对不起,我英语不好。任何想法或帮助将不胜感激。谢谢
暂无答案!
目前还没有任何答案,快来回答吧!