MongoDbでイベントソースを実装するよりも、EventStore( http://geteventstore.com )を使用することの利点を教えてください。
私が尋ねる理由は、私たちの会社にはMongoDbを毎日使用する多くの人々がいるからです。ただし、イベントソーシングでは機能しません。彼らは主題について完全に暗闇にいるわけではありませんが、どこかでそれを実装しようとしているわけでもありません。
イベントソーシングに最適なプロジェクトを開始しようとしています。明確に定義された約16のイベントと、明確に定義された約7つの予測があります。 「約」と言うのは、製品が使用されているのを見て、さらに多くの予測やイベントが必要になることを知っているからです。
REST APIを使用して、組織の他の部分が消費するAPIを最初に使用するアプローチになります。
グレッグヤングが定義する方法でイベントソーシングについて多くを読みましたが、実際にイベントソーシングソリューションを実装したことはありません。
これはグリーンフィールドプロジェクトです。すべてをRESTインターフェースとして公開するので、テクノロジーの制限はありません。EvenStoreでの実務経験またはMongoDbでのイベントソーシングの経験がある場合は、教えてください。
また、イベントソーシングに関するほぼ完全に関連のない質問:イベントストアに直接クエリを行うことはありますか?または、常に新しいプロジェクションを作成し、それらのプロジェクションを設定するイベントを再生しますか?
免責事項私はグレッグヤングです(私の名前が読めない場合:))
とにかく削除されると思いますが、私はこの質問に答えます。私にとってこの質問だけでは少し奇妙ですが、答えはかなり奇妙です。時間をかけて各返信に個別に回答するのではなく、すべてのコメントをこの返信に書き込みます。
1)詳細なモノのカスタムバージョンでのみ実行されるというコメントがありますが、これは当てはまりません(1年以上も使用されていません)。モノに作成した重要なパッチを待機していました(例:threadpool.cがマスターにヒットする)。これが起こった。
2)EventStoreは、3条項のBSDライセンスです。あなたが私たちがオープンソースではないと主張する方法がわからない。また、その後ろに会社があり、商業的なサポートを提供しています。
3)誰かが9月にバージョン3に進むと言っていました。バージョン1は2年前にリリースされました。バージョン2ではクラスタリングが追加されました(明らかに、単一ノードと比べていくつかの重大な変更)。バージョン3では、競合する消費者を抱える能力など、多くのものが追加されています。この間、実際のクライアントプロトコルに関してはほとんど変更されていません(特にHTTP APIを使用している場合)。
推奨事項で本当に気になるのは、比較対象を理解していないようだということです。これは、「neo4jとleveldbのどちらを使用すればよいですか」とほぼ同じ意味になります。 leveldbの上にグラフデータベースを構築することもできますが、これはかなりの作業になります。
この場合のMongoは、OPが自分で書き込む必要があるイベントストアのストレージエンジンになります。プロダクション品質のイベントストアを作成することは、最も基本的な操作さえ必要な場合、ストレージエンジンに加えて簡単な作業です。
私は これはこの質問に相当するメーリングリストに対応して を書きました:
Mongoで次のことをどのように行いますか?:
順序付け/楽観的同時実行性などを使用して、ストリームとの間でイベントの書き込みと読み取りを行います。
次に:
プロジェクションは、書き込まれたのと同じ方法でストリームから読み取る必要はありません。プロジェクションは通常、イベントタイプに関心があり、適切な順序で書き込まれたストリームに関係なく、タイプTのすべてのイベントを必要とします。
また、たとえば、ライブをプッシュイベント通知からプル情報の処理(ポーリングなど)に切り替える機能も必要になるでしょう。
Kafka、datomic、およびEvent Storeが比較されている場合は、もっと理にかなっています。
他の返信は、EventStoreのツールやメリットについては触れておらず、私が紹介するMongoDBのメリットについてのみ言及しています。ただし、私の経験は限られています。
短所から始めましょう...
そして長所...
私は個人的にこれをコア/ミッションクリティカル/または成長するアプリケーションに使用しません!ただし、イベント環境を面白く保つためのサイドケースがある場合は、それを提供します。個人的には今のところモンゴに固執する必要があります。