数据缓冲/存储 - Python

时间:2016-10-14 08:15:29

标签: python offline buffering

我正在编写一个嵌入式应用程序,它从一组传感器读取数据并上传到中央服务器。该应用程序是用Python编写的,可以在Rasberry Pi单元上运行。

需要每1分钟收集一次数据,但是,互联网连接不稳定,我需要在没有连接时将数据缓冲到非易失性存储(SD卡)等。缓冲数据应在连接回来时上传。

目前,我正在考虑将缓冲数据存储在SQLite数据库中,并编写一个可以连续读取数据库并上传的cron作业。

是否有可用于此功能的python模块?

3 个答案:

答案 0 :(得分:0)

如果您指的是使用SQLite数据库的模块,请查看SQLAlchemy

如果你的意思是一个可以做cron所做的模块,请查看sched,一个python事件调度程序。

然而,这看起来是实现任务队列的理想场所 - 使用专用任务代理(rabbitmq,redis,zeromq,..)或python' threads和{{3} }。通常,您希望提交上载任务,工作线程将提取并执行,而任务代理处理重试和失败。所有这些都是异步发生的,不会阻止您的主应用程序。

UPD:只是为了澄清,如果您使用任务代理,则不需要数据库,因为任务代理会为您存储任务。

答案 1 :(得分:0)

  

是否有可用于此功能的python模块?

我不知道任何现成的模块,但是构建一个模块应该非常简单。鉴于您的要求:

  

互联网连接不稳定,我需要在没有连接时将数据缓冲到非易失性存储(SD卡)等。缓冲数据应在连接回来时上传。

该算法看起来像这样(伪代码):

echo 'http://' . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];

关键是分离缓冲和上传问题。即当从传感器读取数据时不要尝试立即上传,始终从预定模块上传。这使两个模块保持简单和稳定。

然而,您需要关注一些边缘情况,以确保可靠地工作:

  1. 在上传过程中插入数据
  2. SQLlite不支持从多个进程中轻松访问
  3. 要解决此问题,您可能需要考虑另一个数据库,或为每批上传创建多个SQLite数据库甚至平面文件。

答案 2 :(得分:-1)

这只是数据库工作。您可以在不同位置创建主数据库和从属数据库,如果不在网络上,则将使用上次同步信息运行。

当连接回来时,hr合并所有数据。

查看此answer并搜索主数据库和从数据库