如何在仅偶尔访问互联网的物联网设备上存储数据?

物联网 产品设计
2021-06-11 09:36:32

我们正处于遥测物联网设备的规划阶段,只能偶尔访问互联网。

我在网上找到了很多关于如何在云中存储物联网数据、使用什么数据库、如何计算空间需求等的信息。我缺少的是:

如何在将数据发送到云端之前将数据存储在客户端本地?

  • 最新数据对我们来说是最有趣的,但对于指标的子集,我们希望将所有数据点保留在设备上,直到它们被传输
  • 最小化设备存储不是首要任务
  • 电池寿命并不重要,只要它正在收集数据,我们的设备就会连接到电源
2个回答

也许您可以使用循环数据库工具它当然会按照您想要的方式运行。

RRDtool(循环数据库工具)旨在处理时间序列数据,例如网络带宽、温度或 CPU 负载。数据存储在基于循环缓冲区的数据库中,因此系统存储空间随时间保持不变。

它还包括以图形格式提取循环数据的工具,这是它最初的目的。存在多种编程语言的绑定,例如 Perl、Python、Ruby、Tcl、PHP 和 Lua。有一个独立的完整 Java 实现,称为 rrd4j

如果您找不到端口或自己构建它,那么在Round Robin Database with MySQL 中使用 MySql 演示了相同的原理

这就是我们在过去几十年中作为嵌入式开发工作的每个项目所做的事情(尽管我们自己推出):

  • 一些数据很重要/至关重要,我们会尽一切努力保留所有数据(并非总是可能,如果通信中断)
  • 有些我们需要最后的 X 个条目(并且可以在设计时将其标注为固定大小)
  • 有些我们需要最后 X 分钟的数据(“循环”,在设计时也固定大小)
  • 有些是“很高兴拥有”,但如果需要空间,我们可以放弃它们(虽然不那么常见)

另外,当然,还有一个问题是在 NVM 中存储哪个。这对您的项目的软件架构师来说真的是一个问题 - 除非是您,在这种情况下,这对我们来说是一个问题:-)

还有其他可以提供帮助的东西,例如压缩数据或运行长度编码(例如,不要使用相同的值保存 1,000 个连续读数的值;只需保存一次值,使用重复计数器)等

由于根据您的规范,这将是基于 linux 的系统,因此您可以将数据本地存储在 Sqlite 数据库中。

进一步检查 SQLITE-SYNC。使用此框架,您的应用程序可以完全脱机工作,然后在 Internet 连接可用时执行自动双向同步。

所以你的应用程序不需要维护例程来同步向前和/向后。

参考:https : //ampliapps.com/sqlite-sync/