2016-08-12 6 views
1

私はJSON APIを見てきており、スケーラビリティのシナリオにつきものになっています。各モデルには3つまたは4つのリレーションシップを持つモデルの大きなコレクション(1000個)があります。JSON APIのスケーリング

JSON APIでは、以上、少なくともの関連IDとの関係を指定する必要があります(必要に応じて、includeとの関係をsideloadする必要があります)。 1000年モデルのそのコレクションは、以下のような有効なJSON APIペイロードを移入することができるようにするすべての単一の関係をJOINを行う必要がある場合:

... 
{ 
    "some_relationship_name": { 
    data: [ 
     { id: 1, type: "derp" } 
     ... 
    ] 
    } 
} 

私は、これはおそらく合理的な方法をで拡張することができますどのように表示されません。

答えて

0

どこに問題があるか分かりません。あなたはリレーションごとに20バイト/ 4リレーション/ 1000レコード=>〜100kBを持っています。既存のアダプターは、そのようなデータを十分に速く処理することに問題はありません。

データを転送する必要がある場合は、いくつかのオプションがあります。圧縮を追加することはできますが、そのような小さなデータの場合、データを圧縮するよりもデータを転送するほうが通常は速いことに注意してください。

その他のオプションは、本当に必要なデータだけを送信することです。通常、Webアプリケーションでは1000個のレコードはすぐには必要ありません。したがって、ページングと遅延ロードは、本当に必要なデータだけを送信するのに役立ちます。

+0

私はもっとはっきりしていたはずです。私はペイロードのサイズを心配していません、私は 'JOIN'のパフォーマンスが心配です。通常、この種のデータでは、JSON APIに準拠させたい場合を除き、関係IDを含める必要はありません。 – maschwenk

1

関係のidを指定する必要はありません。 linksを指定すれば、リンクを取得する方法を提供できます。チェックアウトthe specification

だから、このような何かを行うことができます。

{ 
    id: '1' 
    type: 'base' 
    relationships: { 
     relA: { 
      links: { 
       self: '/base/1/relationships/relA', 
       related: '/base/1/relationships/relA/related', 
      } 
     }, 
     ... 
    } 
    attributes: {...} 
} 

だから、あなたが直接ません必要なものに参加することはありません。たとえば、リストでは、詳細ビューで必要な情報を結合しません。