【问题标题】:send a large number of records from a rest service从休息服务发送大量记录
【发布时间】:2014-10-30 13:44:46
【问题描述】:

我在 PHP 中有一个 REST 服务,它返回一个 JSON 或 XML 响应。但是该服务的一个分支是用于更新本地数据库,问题是记录数或多或少 180 000。

我的问题是,对于有大量记录的这种操作,最好的方法是什么?

我想在服务器上创建一个临时文件,如 csv 、 txt 用于 json 或 xml 并在客户端下载,否则递归地从先前请求的 id 列表发送 GET 请求

阅读评论后可能的解决方案

我在创建一个 csv 文件 (28MB) 然后 zip (5MB) 并传递它以供下载中找到解决方案...

【问题讨论】:

  • 记录数的具体问题是什么?您收到任何错误消息吗?据我所知,JSON 和 XML 对可以编码的元素数量没有限制。两种格式都可能有点冗长,但是,如果您在 HTTP 层中启用压缩,则主要是要注意这一点。
  • 服务器返回内存错误和程序执行时间增加和数据量增加时

标签: php xml json rest download


【解决方案1】:

返回 180k 记录的 Web 服务在概念上是错误的,并且等待发生意外的 DoS 攻击(更不用说因为流量配额而关闭的托管帐户)。

您应该在此实现分页,例如:

http://myserver.tld/myservice/getItems?from=100&max=1000

max 参数限制在一个合理的数量(1000 或对于相对较小的记录可能为 10000),并确保公开一种查找总行数的方法 - 无论是在此调用的结果中还是在另一个以getItemCount 通话为例。

【讨论】:

【解决方案2】:

@Neils 是对的,您的 RESTful 服务不应该在单个请求中提供那么多记录。如果您愿意,可以实现分页并添加 HAL (http://phlyrestfully.readthedocs.org/en/latest/halprimer.html) 链接。

如果您的客户确实需要这么大的一整套数据(同样,这可能是一个需要重新审视的设计),那么您正在寻找一个不同的用例。异步生成该数据集并适当缓存。还要考虑 XML/JSON 是否是大型数据集的正确格式,知道您的客户端将不得不加载和解析它。一个平面 CSV 或其他东西就足够了吗?

【讨论】:

    猜你喜欢
    • 2015-12-22
    • 1970-01-01
    • 2012-03-08
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    • 1970-01-01
    • 2018-07-08
    相关资源
    最近更新 更多