0

Raven データベース内のエンティティへの任意の参照を保存する必要があります。エンティティは集約ルート (以下の「イベント」を参照) である場合もあれば、値エンティティ (以下の「セッション」を参照) である場合もあります。現在、参照を Lucene クエリ (または Lucene に似た構文) として保存することを計画しています。このようなことをした人はいますか? 私は困難な道を進んでいますか?

私の懸念のいくつかは次のとおりです。

  • 値エンティティが識別子を提供する可能性は低いですが、値エンティティを確実に参照できると期待できますか?
  • 個々のエンティティは、Arbitrary Relationship インフラストラクチャを認識しない (分離する) 必要があります。複雑なオブジェクト グラフからクエリを推測する最善の方法は何ですか?
  • リレーションシップを集約ルートのみに制限する (および値エンティティへの参照を防止する) と、問題は単純化されますが、イベント/セッション ドキュメントを再構築する必要があります。これら 2 つのシステムを切り離したままにしておきたい (一方の懸念が他方に影響を与えるべきではない)。

私のシナリオを説明するために、以下にサンプル ドキュメントを含めました。考え、アイデア、ガイダンス、または例は非常に高く評価されます。

Events Collection
{
  Id: “30f6...54a7”,
  Title: “Annual Meeting”
  Sessions: [
    { 
      Code: “COM001”, 
      Title: “Opening Ceremony” 
    },
    { 
      Code: “TEC201”, 
      Title: “Intermediate Tech” 
    }
  ]
}

People Collection
{
  Id: "45a8...f209",
  Name: "Chad"
}

Arbitrary Relationships Collection
{
  Id: “b613...8ebb”,
  SubjectEntityQuery: "People.Id:45a8...f209",
  TargetEntityQuery: “Events.Id:30f6...54a7.Sessions,Code:COM001”,
  Action: "Attended Session",
  Story: "Chad attended the Opening Ceremony session"
}

編集

任意の関係について詳しく説明したいと思います。システム イベントに応答し、2 つのエンティティ間のやり取りを記録するようにシステムを拡張することができます。イベント、セッション、および人よりも多くのエンティティがあります。関係は、ハッシュタグに関するリンクまたはツイートを共有している人物である可能性があります。事実上、Arbitrary Relationships コレクションはグラフのような構造になり、特定のエンティティのすべての~相互作用~を見ることができます。

4

1 に答える 1

2

これは絶叫リレーショナル デザインです。

これを行う最も簡単な方法は、Relationship をオブジェクトにし、その Subject フィールドと Target フィールドを、それが参照する実際のドキュメントの ID を保持する文字列の配列にすることです。このようにして、Includes を利用して関係ドキュメントと一緒に読み込むことができます。いずれにせよ、Lucene クエリ構文を格納することがここでどのように役立つかわかりません。

これをモデル化するためのより良い方法があるかもしれませんが、実際にはビジネス モデルと達成しようとしているものによって異なります。

また、GUID ID を取り除き、Raven の規則を使用することもできます。

于 2013-05-16T00:45:20.460 に答える