StreamIdではなく別のStream属性でストリームを検索することはできますか?たとえば、すべてのストリームのヘッダーにCustomerIdがあり、特定のCustomerIdを持つすべてのストリームを検索したい場合です。
4 に答える
イベントストアは、エンティティのキーによる取得のみをサポートするように設計されています。他の属性による取得をサポートするために、データは、ユースケースごとに個別の場所で結果整合性のある非正規化された方法でインデックス付けされます。したがって、イベントストアはイベントのみを格納し、あらゆる種類のインデックス付きプロジェクションのクエリをサポートするために使用されます。これらは、リレーショナルデータベースの永続的なビューのようなものですが、単純なKey-Valueストアに格納できます。イベントストアとプロジェクションストアは一緒になって、CQRS +イベントソーシングアーキテクチャの背後にあるインフラストラクチャの一部を構成します。このテーマの詳細については、こことそのブログの残りの部分をご覧ください。
イベントストアを誤って使用しようとしている可能性があります。イベントストアは、イベントソースのアグリゲートを再構築するためにコミットされたイベントのストリームを保存および読み取るためにのみ構築されます。実装は、要求/応答相関ID、監査、セキュリティなどのインフラストラクチャの懸念事項を便利に実装するためのヘッダーを提供します。そこにビジネス属性(顧客IDなど)を配置していることに気付いた場合は、代わりに@eulerfxによって提案された読み取りモデルを構築する必要があります。
探しているIDである場合は、CustomerIDをその顧客の実際のイベントストリームIDにすることを検討する必要があります。特定の顧客をそのIDでロードすることは、まさにイベントストアに期待することです。
EventStoreには、探していることを実行できるプロジェクションがあります。詳細はこちらのブログをご覧ください
http://geteventstore.com/blog/20130227/projections-6-an-indexing-use-case/
何かを見つけるのにおそらく最も効率的な方法ではありませんが、ストリームを検索したり特定のストリームを見つけたりするためにストリームのリストが必要な場合は、$ streamsシステムプロジェクションがありますが、使用する前にまず有効にする必要がありますこのPowerShellのようなものを使用する:
uri$ = http://${EventStoreIP}:${EventStoreHttpPort}/projection/${projection}/command/enable
$result = Invoke-WebRequest -Method Post -Uri $uri -UseBasicParsing -TimeoutSec 90 -Headers @{
Authorization = Get-BasicAuthCredentials
}
ここで、$projectionは「$streams」です。同じ方法で有効にできる他のシステム予測も確認してください。これにより、必要なものがより正確に提供される可能性があります。これらについては、https ://eventstore.org/docs/projections/system-projections/を参照してください。