将更新的文件导入数据库

时间:2012-08-19 11:25:57

标签: postgresql streaming data-access-layer notify listen

我的文件每2小时更新一次。我必须自动检测文件并将提取的信息插入到数据库中。

我们的DBMS是Postgresql,编程语言是Python。你会怎么建议我这样做?

我想利用DAL(数据库抽象层)在文件和数据库之间建立连接,并使用postgresql LISTEN / NOTIFY技术来检测新文件。如果您同意我的意见,请告诉我如何使用LISTEN / NOTIFY函数来检测文件。

谢谢

2 个答案:

答案 0 :(得分:3)

您需要的是编写一个作为守护进程运行的脚本,使用文件系统通知API在文件更改时运行回调函数。当脚本被通知文件发生变化时,它应该连接到PostgreSQL并完成所需的工作,然后再回到睡眠状态等待下一次更改。

观察目录进行更改的唯一真正的跨平台方式是使用延迟循环来轮询os.listdiros.stat以检查新文件和更新的修改时间。这是浪费电力和磁盘I / O;对于大型文件集,它也会变慢。如果您的操作系统可以在目录中的文件发生更改时可靠地更改目录修改时间,那么您可以在延迟循环中os.stat目录,这会有所帮助。

使用特定于操作系统的通知API要好得多。如果您使用的是Java,我会告诉您使用NIO2 watch service,它可以为您处理所有平台细节。看起来Watchdog可能会为Python提供类似的东西,但我不需要在我的Python编码中进行目录更改通知,所以我还没有测试过它。如果不能解决问题,您可以使用特定于平台的技术,例如用于Linux的inotify / dnotify,以及用于Windows的各种观察器API。

另见:

答案 1 :(得分:1)

你不能使用LISTEN / NOTIFY,因为它只能从数据库中发送消息,而你的文件显然不在那里。

您需要让python脚本扫描文件所在的目录并检查其修改时间(mtime)。如果更新它们,则需要读入文件,解析数据并将其插入数据库。在不知道文件格式的情况下,没有办法更具体。