1

現在、さまざまなセンサーからデータを受信する Java アプリケーションを作成しています。これが発生する頻度はさまざまですが、私のアプリケーションは 1 日あたり約 10 万回シグナルを受信すると考えています。アプリケーションが信号を受信するたびに、センサーから受信したデータをログに記録したいと考えています。アプリケーションはセンサー データをログに記録するだけではないため、パフォーマンスが問題になります。データをログに記録するための最善かつ最速の方法を探しています。したがって、データベースを使用せずに、ファイルに書き込み、1 日 1 ファイルを保持する場合があります。

では、何が速いのでしょうか? データベースまたはログをファイルに使用しますか? 間違いなく、どのロギング ソフトウェアを使用するかについても多くのオプションがあります。ファイルへのロギングが最適なオプションである場合、私の目的にはどれが最適ですか?

保存されたデータは、後で分析目的で使用される可能性があるため、この点にも留意してください。

4

3 に答える 3

1

安価なPC上の無料のデータベースは、1秒あたり10レコードを簡単に記録できるはずです。

優れたシステムの調整されたデータベースまたは安価なPCのロガーは、1秒あたり100レコード/行を簡単に書き込むことができるはずです。

調整されたロガーは、1秒あたり1000行を簡単に書き込むことができるはずです。

高速バイナリロガーは、1秒あたり100万レコードを簡単に実行できます(レコードのサイズによって異なります)

要件は、信号ごとに1秒あたり約1.2レコードであり、これは任意の方法で達成できるはずです。データをクエリできるようにしたいので、最終的にはデータベースに入れたいと思います。

于 2012-09-19T09:02:51.483 に答える
1

まず、log4j (またはその他のロギング フレームワーク) を使用することをお勧めします。データベースに書き込むjdbcアペンダー、またはファイルに書き込むあらゆる種類のファイルアペンダーを使用できます。ポイントは、あなたのコードは、必要に応じて後で変更できるほど一般的なものになるということです...

一般に、ファイルは db アクセスよりもはるかに高速ですが、ここには最適化の余地があります。パフォーマンスが重要な場合は、ロギング インフラストラクチャへのバッチ処理/非同期呼び出しを使用できます。

于 2012-09-19T08:34:32.307 に答える
0

ああ、組み込みシステムの世界。ホバークラフトで作業しているときにも同様の問題がありました。送信したログのサーバーとして座って聞くだけのローカルエリアネットワークを介して、別のコンピューター(別のプログラムでこれを行うことができます)で解決しました。FileWriter プログラムは C++ で作成されました。これはあなたの2つの問題を解決する必要があります。1 つ目は、ログを書き込む際の明らかなパフォーマンスの向上です。第二に、Java プログラムはログの書き込みから解放され (ただし、プロキシとして機能します)、パフォーマンスが重要なタスクに集中できます。SQLite を使用している場合を除いて、これに DB を使用するのはやり過ぎです。

幸運を!

于 2012-09-19T08:33:54.503 に答える