1

単純なWebベースのアプリケーションシナリオがあります。リクエストを送信し、データベースからレスポンスを取得します。レスポンスには、一度に約10,000〜20,000のレコードなどの非常に多くの行が含まれます。

私はすべてのトランザクションの監査ログ用に設計しました。つまり、そのようなすべての応答のためにデータベースに挿入します。たとえば、一度に10,000〜20,000行です。

として、テーブルへの挿入は監査目的のためだけです。監査とログを通常の応答から分離する方法はありますか?それらを区別する方法はありますか?

デザインに関するどんな助けも非常に高く評価されるでしょう。

前もって感謝します。

4

2 に答える 2

1

一般に、Webアプリケーションが同期Web要求で多くの作業を行うことは悪い考えです。Webサーバー(およびWebアプリケーションサーバー)は、多数の同時要求を処理するように設計されていますが、各要求の実行に数ミリ秒かかることを前提としています。サーバーごとにスレッド戦略は異なりますが、長時間実行されるリクエストがあるとすぐに、スレッド管理によるオーバーヘッドが発生する可能性があります。そうすると、Webサーバーの速度が低下して壊れているように見えることがすぐにわかります。

1回のWebリクエストで数万行を読み書きすることは、ほぼ間違いなく悪い考えです。非同期ワーカーキューを使用するようにアプリケーションを設計することをお勧めします。これにはいくつかの解決策があります。Javaエコシステムでは、vert.xをチェックアウトできます。

これらの非同期モデルでは、監査は簡単です。監査人は、「データベースへの書き込み」リスナーと同じメッセージキューにサブスクライブします。

于 2017-09-27T15:07:38.523 に答える
0

監査とロギングを分離するためにlog4j2をチェックアウトします。

これは、log4j2.xml自体に2つのアペンダーを含めることで簡単に実行できます。

参考までに:

https://logging.apache.org/log4j/2.x/manual/appenders.html

于 2017-09-27T14:55:29.963 に答える