5

データベースを非正規化するデーモンを作成しようとしています。

ActiveMQ をキュー マネージャーとして使用しています。2 つのデータベースがあります。リレーショナル データベース (書き込み + レプリケーション) と非正規化データベース (読み取り用)。

私の質問は、実際のDBを非正規化するためのベストプラクティスは何ですか?いくつかのアイデアがあります:

  • キューを読み取るMySQLプロキシ(luaを使用)(これは可能ですか)
  • MySQL でのトリガー
  • キューを読み取るサービスとしての Java デーモン
  • クローンタブ?(しかし、私はかなりの待ち時間があります
4

1 に答える 1

3

これが公式の「ベスト」プラクティスであるかどうかはわかりませんが、一般的には、イベント ソーシングと、イベントを使用して読み取りモデルへの書き込みと更新を行うことが良い方法だと思います。イベント ソーシングでは、書き込みモデルはリレーショナル データベース自体のエンティティや関係としてではなく、イベントの履歴として存在します (最初はかなり混乱するように聞こえます)。

Eventide が (Ruby で) https://eventide-project.org/をどのように実装しているかを見ると、イベント ソーシングについてさらに多くのことを学ぶことができます。

また、ドメイン イベントを使用した CQRS の簡単な紹介もあります: http://lucisferre.net/2010/11/04/a-brief-introduction-to-cqrs/

しかし、それはあなたの当面の質問に実際には答えません. 「書き込み」モデルの状態をリレーショナル データベースに保存したので、トリガーは 1 つの可能な方法ですが、システムを非常にデータ中心にしています。コード内でトリガーを使用して同じことを実行できれば、よりクリーンでテストしやすくなります。

これを行うには、引き続きドメイン イベント パターンを使用し、イベント バスを使用して、読み取りモデルの更新を担当するイベント ハンドラーにイベントを発行します。

これらのイベントとハンドラーは、SQL トリガーのようなものですが、ドメイン設計とその動作に基づいていると考えてください。Udi Dahan には、このアプローチに関する優れた資料がたくさんあります。ドメイン イベントを使用して読み取りモデルを更新していますが、イベント ソーシングは使用されていません。http://www.udidahan.com/?blog=true

于 2011-02-07T17:01:02.553 に答える