【发布时间】:2015-02-25 00:04:02
【问题描述】:
我有一个从传感器收集数据的应用程序。此数据需要存储在远程主机上的 mysql 数据库中。我想在将其发送到远程数据库之前以某种方式缓存这些数据,以确保在网络暂时关闭时不会丢失数据。
我的第一个想法是将数据存储在本地文本文件中,并使用 mysqls 'load data infile local' 每分钟一次将其上传到远程数据库。这里的问题是我想在成功上传后从文本文件中删除上传的条目。但这有时会损坏文本文件,因为传感器进程仍在写入。
第二个想法是使用命名管道。但是我的容量有限,并且也遇到了阻塞问题...
我正在寻找一种解决方案,其中本地文件通常只包含上次上传和现在之间的测量数据(即 1minute 的数据)。如果上传不起作用,此缓存文件需要保留所有后续文件(直到文件系统的限制)。一旦上传再次工作,所有这些存储的数据都需要上传并从缓存文件中删除。 有没有一种优雅的方式来实现这一目标?我正在使用 Linux、MySql、Python、...
【问题讨论】:
-
您考虑过使用循环日志文件吗?您可以让它每分钟旋转到一个新文件。如果您有一个进程试图发送一个目录中的所有日志文件,您可以删除那些成功发送的文件。或者如果你想要逻辑块,你可以使用一个常规的旋转日志处理程序,它将在特定的文件大小上旋转。这样,您只需检查文件何时达到...256KB 或其他内容,然后发送。成功删除整个文件。 docs.python.org/2/library/…
-
如何循环浏览文件名?您永远不会发送当前正在写入的文件,因此您可以在事后将其删除。