2012-03-10 9 views
3

私は、ポートで待機し、NetFlowレコードを受信し、カプセル化し、別のアプリケーション(アプリケーションB)に安全に送信するPythonでアプリケーション(アプリケーションA)を作成しています。 App Aは、レコードが正常に送信されたかどうかも確認します。そうでなければ、それは救われなければならない。アプリケーションAは数秒待ってから再度送信しようとします。これは重要な部分です。送信が失敗した場合は、レコードを保存する必要がありますが、さらに多くのレコードが届き、保存する必要があります。それを行う理想的な方法はキューです。しかし、私はファイルに(ディスク上の)このキューが必要です。私はこのコードの例としてhttp://code.activestate.com/recipes/576642/を見つけましたが、それは "オープンで、フルファイルをメモリにロード"しています。私は、レコードを持つこのファイルには数GBのデータがあると仮定しなければなりません。Python:ファイルベースのスレッドセーフなキュー

私の質問は、これらのレコードを保存するにはどうすればよいですか?それは、多くのデータを処理する必要がある一方、通常のアクティビティでは一度に1つのレコードしか保存されず、すぐに読み込まれ、削除されるため、遅すぎないと偉大です。したがって、基本状態は空のキューです。スレッドセーフでなければなりません。

私はデータベース(dbm、sqlite3 ..)またはpickle、shelveなどの何かを使用する必要がありますか?

これでちょっと寂しいです...ありがとうございます。

答えて

1

Redisをデータベースとして使用できます。非常に高速で、待ち行列が驚くほどうまくいっています。また、必要なフォールトトレランスのレベルに応じて、いくつかの方法でディスクの状態をディスクに保存できます。外部プロセスであるため、プログラムがクラッシュした場合、すべてが外部に保存されるため、非常に厳しい保存ポリシーを使用する必要はありません。

ここをクリックhttp://redis.io/documentation、これを赤字で行う方法の詳細については、詳しくお伝えしたいと思います。

+1

ご迷惑をおかけして申し訳ありません。私はあなたの提案された解決策を見ていましたが、私は最終的に何かもっと標準的なものを望んでいました私は、アプリケーションの移植性のためにPythonの標準モジュールを使用することをお勧めします。私はsqliteを使用して終了し、私はこれにかなり満足しています。 PRAGMAの設定(同期をOFFまたはjournal_modeをOFFにするなど)をデータベースのパフォーマンスを向上させるために設定するだけでした。 – samuelg0rd0n

関連する問題