【问题标题】:JSON API scalingJSON API 缩放
【发布时间】:2016-12-18 22:25:36
【问题描述】:

我一直在研究 JSON API,并且一直在关注可扩展性场景。假设您有大量 (1000) 个模型,每个模型都有 3 或 4 个关系。

据我了解,JSON API 要求您至少指定关系及其关联的 id(并可选择将关系与include 一起加载)。如果 1000 个模型的集合必须为每个关系执行 JOIN 才能填充有效的 JSON API 有效负载,如下所示:

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

我看不出这怎么可能以任何合理的方式扩展。

【问题讨论】:

    标签: json ember.js ember-data json-api


    【解决方案1】:

    我不确定您在哪里可以看到问题。每个关系有 20 个字节 / 4 个关系 / 1000 条记录 => ~100kB。现有适配器在处理此类数据时应该没有问题。

    如果您需要传输较少的数据,有多种选择。您可以添加压缩,但请注意,对于如此小的数据,传输数据通常比压缩数据要快。

    其他选项是仅发送您真正需要的数据。通常,您不需要立即在 Web 应用程序中创建 1000 条记录。所以分页和延迟加载应该可以帮助你只发送那些真正需要的数据。

    【讨论】:

    • 我应该更清楚。我不担心有效载荷大小,我担心JOIN 的性能。通常,使用这种数据,除非您愿意,否则您不必包含关系 ID,但您必须符合 JSON API。
    【解决方案2】:

    您不必指定关系的ids。您只需指定 links 即可提供获取链接的方法。结帐the specification

    所以你可以这样做:

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

    所以你不必加入任何你不需要的东西。例如,在一个列表中,您不加入您只需要在详细视图中的信息。

    【讨论】:

      猜你喜欢
      • 2019-10-12
      • 1970-01-01
      • 2013-10-22
      • 1970-01-01
      • 1970-01-01
      • 2012-11-16
      • 2021-12-23
      • 2011-10-31
      • 1970-01-01
      相关资源
      最近更新 更多