0

会社で行っている新しいプロジェクトにRavenDbを使用することを検討しています。プロジェクトは、ユーザーが添付する可能性のあるラベルに基づいた一連の動的プロパティを持つエンティティで構成されます。

例:

Imageというエンティティには次のものがあります。

  • Id
  • 名前
  • サイズ

ラベル(システム内の別のエンティティ)を使用して、ユーザーが画像の特定のプロパティを作成できるようにします。ラベルは名前で構成され、親ラベルがある場合があります。

ユーザーが2つのラベルを作成する場合:

  • 車両

Houseラベルには、次のプロパティがあります。

  • 位置
  • サイズ

車のラベルには次のプロパティがあります。

  • ブランド
  • エンジン型式
  • 総ドア

(これらのラベルとプロパティは、アプリケーションの特別な編集画面を使用してユーザーが管理する必要があります)。

次に、ユーザーが画像を作成してその画像に特定のラベルを割り当てる場合、そのラベルのすべてのプロパティが新しい画像に存在する必要があります。1つの画像に複数のラベルを付けることができます。GUIに表示するには、ラベルを個別に照会する必要があります。

私の質問は:

私はSQLでこれを行う方法を知っています。しかし、あらゆる種類のプロパティを持つ300000の画像が存在する可能性がある場合、パフォーマンスについて少し心配しています。特に、これらのプロパティを検索する場合。誰かが私にこの種のセットアップのジャンプスタート(または既存のチュートリアル)を教えてもらえますか?この種のデータ用にエンティティをモデル化する方法がわかりません。

Thnx!

4

1 に答える 1

0

「GUIに表示するには、ラベルを個別に照会する必要があります」とはどういう意味かよくわかりません。ただし、各ラベルのプロパティが直接保存されている各画像のドキュメントが出発点になります。

例えば

    public class Image
    {
        public string Id { get; set; }
        public string Name { get; set; }
        public Dictionary<string, Dictionary<string, object>> LabelProperties { get; set; }
    }

次に、次のようにこれを設定できます。

var img1 = new Image
{
    Name = "Image1",
    LabelProperties = new Dictionary<string, Dictionary<string, object>> 
    {
        {
            "Car", 
            new Dictionary<string, object>
            {
                { "Brand", "GM"},
                { "Color", "Blue"},
                { "Engine type", "Big"},
                { "Total doors", 4}
            }
        },
        {
            "House", 
            new Dictionary<string, object>
            {
                { "Location", "Downtown"},
                { "Color", "Blue"},
                { "Size", 240}
            }
        }
    }
};

これにより、db内の構造JSONが非常にうまく表示されるようになります。

{
  "Name": "Image1",
  "LabelProperties": {
    "Car": {
      "Brand": "GM",
      "Color": "Blue",
      "Engine type": "Big",
      "Total doors": 4
    },
    "House": {
      "Location": "Downtown",
      "Color": "Blue",
      "Size": 240
    }
  }
}

次に、動的インデックスを使用してこれをクエリできます。たとえば、青い家を含むすべての画像を検索するには、次のようにします。

var blueHouses = session.Query<Image>()
.Customize(x => x.WaitForNonStaleResults())
.Where(x => Equals(x.LabelProperties["House"]["Color"], "Blue"));

Console.WriteLine("--- All Images Containing a House of Color Blue");
foreach (var item in blueHouses)
{
    Console.WriteLine("{0} | {1}", item.Id, item.Name);
}

ラベル自体を照会する場合は、インデックスが必要になる場合があります。完全な例については、要点を参照してください。

于 2013-03-11T23:46:42.073 に答える