0

現在、データを単純な階層に格納するアプリケーションに取り組んでいます。モデルは次のようになります (C# に似た構文で表されます)。

class Box {
    int Id { get; set; }
}

class Gadget {
    int Id { get; set; }
    int ParentBox { get; set; }
}

つまり、私は数千個のボックスを持っており、ボックスに属するガジェットは 0 個以上あります。データにアクセスするために、すべてのボックスまたはそれらのサブセットを照会できる小さな REST API を作成しました。API 経由の応答は、ボックスに属するすべてのガジェットを含むデータ転送オブジェクトです。一般的な JSON の回答は次のようになります。

{ "Boxes": [
    { "Id: 1,
      "Gadgets": [
        { "Id": 100 }
        { "Id": 101 }
      ]
    },
    { "Id: 2,
      "Gadgets": [
        { "Id": 200 }
        { "Id": 201 }
      ]
    }
}

残念ながら、パフォーマンスはお粗末であることが判明しました。データを取得するロジックは次のとおりです (これも C# に似た構文です)。

var boxes = Db.Select<Boxes>();

foreach (var box in boxes) {
  var boxDto = new BoxDto();
  boxDto.Gadgets = ConvertToDto(Db.Select<Gadget>().Where(q => q.Box == box.Id));
}

私の解決策が単純であることはわかっています。私は何万もの箱を持っており、それぞれの箱には何十ものガジェットが入っています。私の質問は次のとおりです。

  • この種の関係を効率的に管理するためのパターンはありますか? 私はこの問題を最初に抱えているわけではありませんが、ウェブ上で何も見つけられません.
  • データモデルを変更する必要がありますか? もしそうなら、どのように?

アイデア/フィードバックをいただければ幸いです。

4

1 に答える 1

0

1 つの可能性として、SQL Server を使用していると仮定すると、XML を出力するクエリを作成できます。このようにして、データベース内のボックスとガジェットを結合し、必要な階層を持つ XML ファイルを返すことができます。

アプリケーションが XML を取得したら、それを JSON に変換するのは簡単なプロセスです。

または、非常に単純な JSON の場合は、TSQL で文字列連結を行うことができます。基本的に、独自の JSON を構成し、ストアド プロシージャからそれを返します。ただし、階層が複雑な場合は、非常に厄介なものになる可能性があります。

于 2013-07-04T00:07:21.857 に答える