私は本質的にイーサネットデバイスをスニッフィングし、特定のパターンを研究するアプリケーションを作成しました。PythonとScapyを使用してデータをキャプチャしています。後世やパターン研究のためにデータベースにデータを取り込む必要があるため、以下の戦略を検討しています。
1)高性能のKey-Valueストアを使用して基本データをキャプチャしたいと考えています。これは基本的に、約200個のキーを持つkey:valueストアになります。2)1時間ごとにキーストアをプールし、特定の条件とパターンに基づいて、K:Vストアに保存されている値に基づいてPostgresデータベースにデータを入力します。
K:VにはRedisを使用する予定です。データベース、ファイルベースのキャッシュなどを含む他のソリューションを検討しましたが、パフォーマンスのボトルネックがあります。1つには、毎分処理される数千のパケットがあり、データベースとの間でSQL呼び出しを行ったり来たりすると、プログラムの速度が低下します。
私はRedisを使ったことがありません。しかし、これが最も高速で効率的なK:VNoSQLデータストアだと言われています。そして、redis python APiはそれを非常にPythonicにします。基本的に、データベースストアには200の奇数キーと、キーの80%に関連付けられた長い整数の値、または場合によっては200文字未満のcharフィールドがあります。
質問
1)これは正しいアプローチですか?2)考慮すべき他のパラメータは何ですか?3)メモリはどのくらいの規模になりますか?より高速なパフォーマンスのためにメモリサイズを最適化するには、どうすればよいですか?4)メモリサイズを計算するにはどうすればよいですか?
Pythonは私たちが知っている唯一の言語です。したがって、C /C++のような提案は魅力的ではないかもしれません。
絶対的に正確な結果を得るのではなく、パターンを調査することを目的としているため、たまにいくつかのパケットが失われることはありません。キーの数は同じままで、値は上下する可能性があります。
将来のメインプルはSQLを集中的に使用するため、最終的に計算されたデータをRDBMSに格納する必要があります。