我在PHP中有一个REST服务,它返回一个JSON或XML响应。但是这项服务的一个分支是用于更新本地数据库,问题是记录的数量多少少于18万。
我的问题是,对于具有大量记录的此操作,最佳方法是什么?
我想在服务器上创建临时文件,如csv,txt用于json或xml,并在客户端下载,否则递归地从先前请求的id列表中发送GET请求
阅读评论后可能的解决方案
我找到解决方案创建一个csv文件(28MB)然后压缩(5MB)并传递下载...
答案 0 :(得分:1)
返回180k记录的网络服务在概念上是错误的,并且等待发生意外的DoS攻击(更不用说由于流量配额而关闭的主机帐户)。
你应该对此实现分页,例如:
http://myserver.tld/myservice/getItems?from=100&max=1000
将max
参数限制在一个合理的数量(相对较小的记录为1000或10000或10000),并确保提供一种查找总行数的方法 - 在此调用的结果中或例如,在另一个getItemCount
电话中。
答案 1 :(得分:0)
@Neils是对的,您的RESTful服务不应该在单个请求中提供那么多记录。如果您愿意,可以实施分页并添加HAL(http://phlyrestfully.readthedocs.org/en/latest/halprimer.html)链接。
如果您的客户真实地需要一大套完整的数据(这可能是需要重新访问的设计),那么您正在查看不同的用例。以异步方式生成该数据集并适当缓存。还要考虑XML / JSON是否是数据集的正确格式,知道您的客户端将不得不加载和解析它。平坦的CSV或其他东西可以满足吗?