【问题标题】:How to cache data before sending to remote db?如何在发送到远程数据库之前缓存数据?
【发布时间】:2015-02-25 00:04:02
【问题描述】:

我有一个从传感器收集数据的应用程序。此数据需要存储在远程主机上的 mysql 数据库中。我想在将其发送到远程数据库之前以某种方式缓存这些数据,以确保在网络暂时关闭时不会丢失数据。

我的第一个想法是将数据存储在本地文本文件中,并使用 mysqls 'load data infile local' 每分钟一次将其上传到远程数据库。这里的问题是我想在成功上传后从文本文件中删除上传的条目。但这有时会损坏文本文件,因为传感器进程仍在写入。

第二个想法是使用命名管道。但是我的容量有限,并且也遇到了阻塞问题...

我正在寻找一种解决方案,其中本地文件通常只包含上次上传和现在之间的测量数据(即 1minute 的数据)。如果上传不起作用,此缓存文件需要保留所有后续文件(直到文件系统的限制)。一旦上传再次工作,所有这些存储的数据都需要上传并从缓存文件中删除。 有没有一种优雅的方式来实现这一目标?我正在使用 Linux、MySql、Python、...

【问题讨论】:

  • 您考虑过使用循环日志文件吗?您可以让它每分钟旋转到一个新文件。如果您有一个进程试图发送一个目录中的所有日志文件,您可以删除那些成功发送的文件。或者如果你想要逻辑块,你可以使用一个常规的旋转日志处理程序,它将在特定的文件大小上旋转。这样,您只需检查文件何时达到...256KB 或其他内容,然后发送。成功删除整个文件。 docs.python.org/2/library/…
  • 如何循环浏览文件名?您永远不会发送当前正在写入的文件,因此您可以在事后将其删除。

标签: python mysql linux


【解决方案1】:

你有没有想过使用 sqlite?这将允许您使用(大致)与远程 MySQL 服务器相同的数据层,但您可以在本地缓存,然后在准备好时推送您的插入。

它使用平面文件作为后端,但您不必担心这一点,并且有一些命令行工具(类似于 MySQL 客户端)来管理您的应用创建的数据文件。

这个链接看起来并不可怕:

http://zetcode.com/db/sqlitepythontutorial/

【讨论】:

  • 感谢 sqlite 的想法 - 这对我来说很好用
猜你喜欢
  • 2013-09-23
  • 1970-01-01
  • 1970-01-01
  • 2019-11-18
  • 1970-01-01
  • 1970-01-01
  • 2017-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多