問題タブ [cqrs]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - CQRS で非正規化するベスト プラクティスは何ですか?
データベースを非正規化するデーモンを作成しようとしています。
ActiveMQ をキュー マネージャーとして使用しています。2 つのデータベースがあります。リレーショナル データベース (書き込み + レプリケーション) と非正規化データベース (読み取り用)。
私の質問は、実際のDBを非正規化するためのベストプラクティスは何ですか?いくつかのアイデアがあります:
- キューを読み取るMySQLプロキシ(luaを使用)(これは可能ですか)
- MySQL でのトリガー
- キューを読み取るサービスとしての Java デーモン
- クローンタブ?(しかし、私はかなりの待ち時間があります
cqrs - CQRS: 書き込みデータベースと読み取りデータベースの同期
書き込みデータベースと読み取りデータベースを同期するさまざまな方法について、どなたか教えていただけませんか?
現実性、パフォーマンス、実装コストなどの観点から、さまざまなテクノロジとは何か、それぞれをどのように評価しますか?
transactions - コマンドハンドラと実行のトランザクション境界とは何ですか?
顧客情報を編集するためのUIの例を見てみましょう。ユーザーは5つのフィールドを編集し、「送信」を押します。私たちは優れた抽象主義者であるため、5つのフィールドを編集して、それらを異なるコマンドにしました(特定のフィールドへの編集を説明します)。
コマンドハンドラーは、NHibernateなどのツールで永続化されるオブジェクトにプロパティを設定することになります。そのため、データベースに対してUPDATEを実行することになります。
私の主な質問は、データベースのパフォーマンスの観点から、単一のUPDATEステートメントを発行する方が理にかなっているのでしょうか、それとも5つの異なるUPDATEステートメントを発行しても大丈夫ですか?
コマンドハンドラーがトランザクションの境界であるという考えが好きです。動作してトランザクションがコミットされるか、動作せずにトランザクションがロールバックされます(そして、再試行するために再キューイングされる可能性があります)。各コマンドの成功または失敗は、他のコマンドから独立しています。
もう1つのアプローチは、これらのコマンドの処理を単一のデータベーストランザクションにラップすることです。これにより、NHibernateがフラッシュを決定したときに、単一のUPDATEを送信することになります。しかし、これにより、コマンドの処理がオールオアナッシングタイプになり、必ずしも非同期で実行できるとは限りません。
しかし、すべてのコマンドが正しく実行されていることを確認し、失敗した場合は完全にロールバックしたい場合はどうでしょうか。たぶん、多くの小さなトランザクションを含む単一の分散トランザクションがありますか?これにより、データベースの競合が発生し、デッドロックのリスクが高まり、処理が遅くなります(デッドロックのリスクがさらに高まります)。しかし同時に、一貫性が重要です。これは、可用性と一貫性の間のトレードオフだと思います(CAPを参照)。
.net - CQRS - CommandHandler が他の CommandHandler を呼び出す必要がある
CommandHandlers が他の CommandHandlers と通信できる/できないかどうかについて、いくつかの意見を得ようとしています。
これは、私が遭遇した単純なケースです。次のようなコマンドの ChangePasswordCommandHandler があります。
そのため、ハンドラー内でユーザーの古いパスワードを検証する必要があるため、次の 3 つのオプションがあります。
- ValidateCredentialsCommandHandler への呼び出しをディスパッチします。
- 検証ロジックの一部を、両方のハンドラーが使用できるサービスに分解します。
- 呼び出しプロセスに最初にこのチェックを行わせますが、ビジネス ロジックがドメイン層の外に漏れています。
他のハンドラーへのディスパッチでいくつかの技術的な問題が発生しています。ほとんどの場合、Web リクエストごとのトランザクションを使用しているため、競合しようとしている 2 つのトランザクションがあります。
考え?
.net - CQRS、DDD 同期レポート データベース
CQRS と DDD とイベント ソーシングを試しています。顧客に電子メール アドレスを更新してもらい、それによって CustomerUpdatesEmailAddress イベントが発生するとします。これは私の運用 (書き込み DB) に渡され、テーブルが更新されます。私たちのシステムは、運用データを取得してデータベースを更新する ETL プロセスが実行されるように設計されています (これは読み取りデータベースです)。変更された電子メール アドレスに基づいて、ETL がいくつかの重労働を実行できることを考えると (電子メール アドレスは単なる例です)。 )、ユーザーが電子メール アドレスの更新を画面ですぐに確認したい場合、レポート データベース (DataMart と運用側) を同期するにはどうすればよいでしょうか?
cqrs - CQRS - イベント サービスの使用
私の質問は、CQRS のコマンドによって発行されたイベントにサブスクライブする消費イベント サービスに関するものです。
特定のイベントに基づいていくつかのドキュメントを生成するドキュメント生成サービスがあるとします。ドキュメント生成サービスは、集約ルートを介してドメインからデータをロードしますか? もしそうなら、ドキュメント生成サービスは、生成サービスによってイベントが受信された後に更新された可能性のあるデータをロードしませんか? どうすればそれが起こらないようにできますか?
私は、イベントがコマンド DTO によって受信された情報のみを渡し、ドメイン モデル データ全体をイベントに渡すと仮定していると思います。
cqrs - CQRS - 結果整合性
CQRS パターンに従って実装する必要がある次のシナリオがあります。
- ユーザーがログインする
- ユーザーは保険の詳細を入力します
- ユーザーは適用する決定を求めます
- ユーザーは決定の結果を表示します
これはかなり簡単に思えますが、私の問題はステップ 3 と 4 の間にあります。ステップ 3 でApplyForDecision
、引受サービスから決定を取得するコマンドを送信し、その決定の結果を含むイベントが読み取りストアの BUS に送信されます。後でそれを消費し、決定結果でビュー テーブルを更新します。
問題はUIにあります。CQRSでは読み取りモデルが「すぐに」更新されないため、決定が適用されていることをユーザーに知らせるにはどうすればよいですか?決定が進行中であり、「すぐに」更新されることをUIに表示するにはどうすればよいですか? ' 到着?
決定がまだ適用されていない可能性があるため、ユーザーがログアウトして再度ログインできるようにする必要もあります。UI に「保留中の決定画面」を表示するにはどうすればよいですか?
architecture - StackOverflow のようなサイトで CQRS を使用できますか?
CQRS (Command-Query Responsibility Segregation) アーキテクチャ パターンを使用して、StackOverflow のようなサイトを構築できますか? 私は CQRS と DDD (ドメイン駆動設計) に比較的慣れていないので、パターンを調査し、パターンに慣れているサイトをモデル化しようとしています。CQRS が StackOverflow のようなサイトの多くの側面で役立つことはわかりますが、可能かどうかわからない領域がいくつかあります (少なくとも、すぐにはわかりません)。具体的には:
- 質問する 質問 を作成すると、すぐに表示され、編集できます。CQRS で「AskQuestion」などのコマンドを発行すると、「QuestionAsked」というイベントが作成されます。最終的に、質問は非正規化データ ストアにプッシュされます。しかし、SO の経験はすぐにわかります。これはCQRSで可能ですか?
- 投票 私の投票はすぐに反映されます。CQRS では、これらのコマンド/イベントが最終的にイベント バスを介して読み取りストアに移動することを想像します。しかし、SOはすぐに情報を提供してくれます。
私の懸念は、SO が提供する即時フィードバックの概念に関するものです。CQRS はこれを提供できますか? もしそうなら、これはどのように行われますか?これを処理する方法を示す良い例はありますか?
それが役立つ場合、私の環境は VS2010/C#/SQL2008R2 ですが、SQLite などの他のオプションも受け入れています。また、NCQRS と LOKAD のフレームワーク、および Mark Nijhof のサンプルも検討しており、Greg Young のサンプルをダウンロードする予定です。 . CQRS サンプルについては、他にあまり見つかりませんでした。
ありがとう!
cqrs - CQRSの単一のトランザクションでの複数の集約ルートの作成
CQRSで複数の集約ルートがどのように作成されるのか知りたいのですが。
例:受話器の集合ルートとSimcardの集合ルートがあります。これらのアグリゲートからのIDは、サブスクリプションアグリゲートルートの一部である必要があります。
SimCardとHandsetに基づいてサブスクリプションアグリゲートを作成する必要があります。SimCardとHandsetアグリゲートがシステムに存在しません。サブスクリプションが作成されるときに作成されます。サブスクリプションが削除された場合、SimCardとハンドセットは削除されません。ビジネス上の理由:ユーザーが同じハンドセットに異なるSimCardを挿入するか、ハンドセットがデュアルSimCardをサポートしている可能性があります。
ビジネスルール:電話番号は一意である必要があります。受話器のシリアル番号は一意である必要があります。1つのサブスクリプションが1つの受話器に関連付けられています1つの受話器が1つ以上の電話番号に関連付けられています。
- 引用テキストを非表示にする-
- 引用テキストを表示する
c# - CQRS - ページまたはクエリを表示しているユーザーを処理する方法
構築中のアプリケーション (複雑なビジネス ロジックを備えたオンライン ディスカッション システム) に CQRS を使用していますが、実装で気になる部分に到達しました。
ページビューをどのように処理すればよいですか? ユーザーがスレッドを表示した場合、それを追跡したいと思います。それを追跡したいので、コマンドとイベントを作成し、これを、表示しているオブジェクト (たとえば、それぞれ UserViewsThread と UserViewedThread) を担当する集約ルートに結び付ける必要があります。しかし、これは非常に非効率的であるように思われます。これ以外に、ディスカッション システム (フォーラム/スレッドの表示) の多くのユース ケースで集約ルートに到達する理由はありません。これを導入したので、ページのすべてのビューで追加のコマンド ディスパッチとイベント パブリッシュを行います。これは、スレッド集約の「スプールアップ」、イベントのシリアル化、およびイベントへの送信を担当します。出版社。
これを行うためのより良い方法が必要です。おそらく、コントローラー オブジェクトがイベントをディスパッチできるようにすることを考えていましたが、集約をバイパスすることで、動作をページビューに関連付けることができなくなりました。
もう 1 つの可能性は、ユーザーを認証する方法としてこれを使用するという考えです。UserViewsThread および UserViewsForum コマンドは、認証例外をスローして、ユーザーがこのアクションを実行できないことをコントローラーに知らせることができます。しかし、これらがイベントに変換され、私のイベント ストアに格納された場合、ページ ビューごとに作成された複数のイベントについて話していることになります。これは、パフォーマンスを非常に損なう可能性があります (ページ ビューごとにデータベース トランザクションが発生します...うーん)。そしてリソース管理。
あなたの彼の考えは何ですか?