我在Python中创建一个应用程序(应用程序A),它侦听端口,接收NetFlow记录,封装它们并安全地将它们发送到另一个应用程序(应用程序B)。 App A还会检查记录是否已成功发送。如果没有,则必须保存。应用程序A等待几秒钟,然后再次尝试发送它等。这是重要的部分。如果发送不成功,则必须存储记录,但同时还可以存储更多记录,并且还需要存储它们。这样做的理想方法是排队。但是我需要这个队列在文件中(在磁盘上)。我找到了例如这段代码http://code.activestate.com/recipes/576642/,但它“在打开时,将完整文件加载到内存中”,这正是我想要避免的。我必须假设这个带有记录的文件最多有几个GB。
所以我的问题是,您建议将这些记录存储在哪里?它需要处理大量数据,另一方面如果它不是太慢则会很好,因为在正常活动期间,一次只保存一条记录并立即读取和删除。所以基本状态是一个空队列。它应该是线程安全的。
我应该使用数据库(dbm,sqlite3 ..)还是像pickle,shelve或其他什么东西?
我对此有点了解......谢谢。
答案 0 :(得分:1)
您可以将Redis用作此数据库。它非常快,排队效果非常好,并且可以通过几种方式将其状态保存到磁盘,具体取决于您想要的容错级别。作为一个外部流程,您可能不需要使用非常严格的保存策略,因为如果您的程序崩溃,所有内容都会保存在外部。
请参阅此处http://redis.io/documentation,如果您想了解有关如何在redis中执行此操作的详细信息,我很乐意详细说明。