48

MongoDb でイベント ソーシングを自分で実装するよりも、EventStore ( http://geteventstore.com )を使用する利点を知りたいです。

私が尋ねる理由は、私たちの会社には、MongoDb を毎日扱っている人がたくさんいるからです。ただし、イベント ソーシングでは機能しません。彼らはこの件について完全に闇に包まれているわけではありませんが、どこにも実装しようとしているわけではありません。

イベント ソーシングに最適なプロジェクトを開始しようとしています。約 16 の非常に明確に定義されたイベントと、約 7 の明確に定義された予測があります。私が「約」と言ったのは、製品が実際に使用されているのを見たら、より多くの予測やイベントの需要があることを知っているからです.

このアプローチは、組織の他の部分が使用する REST Api を使用した API ファーストになります。

Greg Young が定義するようにイベント ソーシングについてよく読んできましたが、実際にイベント ソーシング ソリューションを実装したことはありません。

これはグリーン フィールド プロジェクトです。すべてを REST インターフェイスとして公開するため、技術的な制限はありません。そのため、EvenStore または MongoDb を使用したイベント ソーシングの経験がある場合は、教えてください。

また、イベント ソーシングに関するほとんどまったく関係のない質問: イベント ストアに直接クエリを実行したことがありますか? それとも、常に新しいプロジェクションを作成し、イベントを再生してそれらのプロジェクションを設定しますか?

4

2 に答える 2

7

他の返信は、EventStore のツールや利点については言及しておらず、MongoDB の利点についてのみ言及しているように見えます。ただし、私の経験は限られていることに注意してください。

私は短所から始めます...

  • 多くのチェックインがあり、どのバージョンを積極的にサポートするかを決定することができます。チームはリリースを固めてきましたが、リリース後 18 か月も経たないうちにバージョン 3 に到達したということは、サポートしているバージョンを別のより新しいバージョンにプルアップする必要があることを示しているはずです (これはプラットフォームにも影響を与える可能性があります)。展開することを選択します)。
  • すべてのプラットフォームで簡単に動作するわけではありません (特に、クラウド環境や Docker ベースの lxc コンテナーに移行しようとしている場合)。これの一部は、Mongo などの他の DB を取り巻くコミュニティによるものです。しかし、チームは、クロスプラットフォームの安定性を維持しながら、読み取り/書き込みパフォーマンスに力を入れているようです. 時が経つにつれて、今日では魅力的ではないベアメタル OS の実装からあまり逸脱したくないことがわかりました。
  • Mono の特別なバージョンを使用します。Mono の古いバージョンのサポートを見つけることは、プロセスを根管のようにするのに役立つだけです。
  • EventStore のパフォーマンスを最大限に活用するには、アーキテクチャについて考える必要があります。フラット ファイルへの EventStore 出力とイベント データは、急速に大きくなる可能性があります。データを保持しているディスクの故障率はどれくらいですか。物事はどのように圧縮されますか?アーカイブ?など。多くの制御があり、制御はデータをイベントとして保存することを目的としています。ただし、Greg Young 自身がディスクを長期的に最適化して保存する機能について私の墓に引用できると確信していますが、同様のケースに遭遇した経験のある成熟した Mongo コミュニティを見つける可能性が高いでしょう。

そして長所...

  • RESTful - AtomPub です。あなたのストリームは十分に具体的ではありませんか? 別のものを作成し、心ゆくまで http gets を実行します。ルーティングについて懸念がある場合は、http 転送を行います。セキュリティを懸念して、http プロキシを前に置きます。単純!
  • イベントが新しいデータを生成し始めると、プロジェクションをテストして構築するための優れたツールとUIのスイートがあります(たとえば、プロジェクションをデバッグする方法としてクロムブラウザを使用します...それらはJavaスクリプトで書かれています)
  • 読み取りパフォーマンス - アプリケーションはフラット ファイルに出力するため、カーネル レベルのキャッシュを取得し、http 経由で簡単に公開できます。また、インデックスは、より大きなデータ セットに対して予測をクエリするために、ストリーム全体に存在します (ただし、時間が経つにつれて、インデックスのパフォーマンスが徐々に向上すると感じています)。

個人的には、これをコア/ミッションクリティカル/または成長中のアプリケーションには使用しません! ただし、イベント化された環境を興味深いものに保つための副次的なケースがある場合は、それを行います。個人的には、今のところ Mongo に固執する必要があります。

于 2014-05-05T21:53:28.050 に答える