4

現在、一部の主要な事業体に監査証跡の生成を実装する必要があります。これらの場合、通常どおり、変更されたすべてのフィールドの新旧の値と、タイムスタンプ、エンティティID、ユーザーなどのヘッダーデータを保持する必要があります。誰が保存しましたか。

これを行うには、次のようなさまざまな方法があることを理解しています。

  1. .NETコード側、Reflectionを使用
  2. SQLServer側のトリガー
  3. SQL Server CDC(変更データキャプチャ)

.NET Reflectionベースのメソッドは、作成に少し時間がかかる可能性がありますが、適切に実行されれば、コードを変更せずに将来追加される新しいプロパティを含めることができ、すべての子エンティティ(のコレクションなど)を拡張および比較することもできます。メインの.NETエンティティに追加された他のサブエンティティ)。

実際には、このような.NETベースの監査証跡生成を使用するレガシーアプリケーションがあり、監査証跡全体をXMLフィールドとしてSQLデータベースに保存し、長年にわたって監査テーブルは35GBのデータのようなものになっています。

次の点で、トリガーベースのソリューションがいかに簡単であるかを考えています。

  • 最初の実装
  • 監査するエンティティの将来の変更で必要なすべての変更(フィールドの追加/変更/削除など...)
  • 監査データはどの程度読みやすいですか?特定の保存操作の新旧の値を表示するクエリを単純に作成できますか?

...そしてパフォーマンスはどうですか?

誰かが両方のアプローチの経験があり、いくつかの長所と短所を提案または指摘することができますか?

4

3 に答える 3

4

監査の要件は、すべての組織に非常に固有です。私の最後のプロジェクトでは、リアルタイムシステムに送信されたメッセージの監査証跡を保持する必要がありました。

ボリュームはかなりのものでした。50GBを超えるテキストファイルがある日もあれば、平均10〜15GBを超える日もあります。

私たちが使用した最初の解決策は、SQLでそれを永続化することでした

  • パフォーマンスが遅い
  • クエリが遅い
  • アーカイブソリューションも同様に遅い
  • dbレコードのみのクエリのサポート

約2年前

  • テキストファイルに直接ログインするように移動しました。開いて追加
  • 消費されるスペースを削減するために、毎日テキストファイルをgzipで圧縮しています。
  • 高速書き込み
  • 読み取りが遅い(gzip圧縮されたストリームとクエリレコードを読み取る)

去年

  • ファイルサイズを4Gbに制限し、ロールオーバーして新しいファイルを使用します(gzipパフォーマンスの向上、OOMの削減)
  • 毎朝ファイルをgzipで圧縮する
  • 高速書き込み
  • 並列読み取りを実行できるため、読み取りが向上します(gzip圧縮されたストリームとクエリレコードを読み取ります)

あなたが選ぶものはあなたのニーズに基づいています。

于 2013-02-26T12:39:57.583 に答える
4

過去に、同様の要件のために、ドメイン イベントとメッセージングに目を向けました。多少複雑になりますが、それだけの価値はあります。少なくともそれを考慮することをお勧めします。

基本的に、ビジネス オブジェクトに変更が加えられたときに発生するイベントを定義することで、変更をモデルの第一級市民にします。これらのイベントは、フィールド レベルでの単なる変更ではなく、ビジネスの意図を捉える良い方法にもなります。たとえば、OrderRefunded通常、 という名前のビジネス イベントは、 よりも優れた監査ポイントですOrderTotal field changed from 45.00 to 0.00

パブリッシュ/サブスクライブを使用したメッセージングでこれらのドメイン イベントを起動すると、多くのサブスクライバーがイベントを処理できるようになります。これらのサブスクライバーの 1 つは、監査サブスクライバーである可能性があります。これにより、元のリクエストを処理しているドメインからすべてのパフォーマンスへの影響 (インデックスの再構築など) が取り除かれ、Audit サブスクライバーに負担がかかります。これは、監査コードのバグによってビジネス トランザクションの処理が停止するという問題が発生しないことも意味します。

もう 1 つの利点は、保存する必要があるデータの量です。このアプローチには、Audit サブスクライバーが使用する予定のデータ量のみを保存する必要があるという利点があります。保存またはアーカイブするデータの量に関するルールも、監査を処理しているサービスにローカライズされています。したがって、必要のないデータを保存していないことを確認できます。

これを行うために過去に使用したツールには、NServiceBusRabbitMQが含まれます。問題に応じて、それぞれに利点と欠点がありました。

于 2013-02-26T14:01:33.500 に答える
1

ビジネス エンティティをビューにマップすると、INSTEAD OFトリガーを使用して監査ログを生成できます。

于 2013-02-26T12:52:03.810 に答える