当使用 api 检索大量数据(可能是数千个项目)时,需要考虑几个关键方面,以确保流程高效、灵活且高性能。以下是需要管理的关键因素的细分,以及针对 php 用户的解决方案。
通过 api 检索大数据时的关键注意事项
让我分享一些通过 api 高效检索大型数据集的关键注意事项:
- 处理分页:api 通常在页面中传递数据。要检索所有数据,您需要管理分页,执行多个 api 调用,同时跟踪光标或页码。计算所需的 api 调用数量并管理此过程对于确保您获得完整的数据集至关重要。
- 内存管理:获取大型数据集时,一次性将所有内容加载到内存中可能会压垮您的系统。避免同时将所有结果加载到内存中至关重要。相反,以块的形式处理数据,确保您的应用程序保持响应并且不会遇到内存问题。
- 速率限制和节流:许多 api 都会施加速率限制,例如限制每秒 x 个请求或每分钟 y 个请求。为了保持在这些限制之内,您必须实现灵活的限制机制,以适应 api 的特定限制。
- 并行 api 请求:考虑到分页需要执行大量 api 调用,您希望尽快检索数据。一种策略是并行进行多个 api 调用,同时遵守速率限制。这可确保您的请求既快速又符合 api 限制。
- 高效的数据收集:尽管发出了大量分页 api 请求,您仍需要将结果合并到一个集合中,有效地处理它们以避免内存过载。这确保了数据的顺利处理,同时保持较低的资源使用率。
- 优化 json 解析:许多 api 以 json 格式返回数据。处理大型响应时,以高性能方式访问和查询 json 的特定部分非常重要,确保不会加载或处理不必要的数据。
- 高效的异常处理:api 通常通过 http 状态代码引发异常,指示超时、未经授权的访问或服务器错误等问题。使用编程语言提供的异常机制来处理这些问题非常重要。除了基本的错误处理之外,您还应该以与应用程序逻辑一致的方式映射和引发异常,从而使错误处理过程清晰且易于管理。实施重试、记录并将错误映射到有意义的异常可确保数据检索过程顺利可靠。
“惰性 json 页面”php 解决方案
如果您使用 php,那么您很幸运。 lazy json pages 开源包提供了一个方便的、与框架无关的 api 抓取器,可以通过异步 http 请求将分页 json api 中的项目加载到 laravel 惰性集合中。该包简化了分页、限制、并行请求和内存管理,确保效率和性能。
您可以在官方 github 存储库的自述文件中找到有关该包的更多信息,以及用于自定义它的更多选项:lazy json pages。
立即学习“PHP免费学习笔记(深入)”;
我想对软件包的作者 andrea marco sartori 表示感谢。
示例:从 storyblok 中检索数千个故事
这是使用 php 中的 lazy json pages 包从 storyblok 检索数千个故事的简明示例。
首先,您可以创建一个新目录,跳转到该目录并开始安装包:
mkdir lazy-http cd lazy-http composer require cerbero/lazy-json-pages登录后复制
安装包后,您可以开始创建脚本:
<?php require "./vendor/autoload.php"; use IlluminateSupportLazyCollection; $token = "your-storyblok-access-token"; $version = "draft"; // draft or published $source = "https://api.storyblok.com/v2/cdn/stories?token=" . $token . "&version=" . $version; $lazyCollection = LazyCollection::fromJsonPages($source) ->totalItems('total') ->async(requests: 3) ->throttle(requests: 10, perSeconds: 1) ->collect('stories.*'); foreach ($lazyCollection as $item) { echo $item["name"] . PHP_EOL; }登录后复制
然后您可以替换您的访问令牌,并通过 php 命令执行脚本。
它是如何运作的
- 高效分页:api 结果分页,惰性集合处理获取所有页面,而不需要将所有内容存储在内存中。
- 异步 api 调用:->async(requests: 3) 行并行触发三个 api 请求,从而提高性能。
- 限制:->throttle(requests: 10, perseconds: 1) 行确保每秒发出的请求不超过 10 个,遵守速率限制。
- 内存效率:使用惰性集合可以逐项处理数据,减少内存开销,即使对于大型数据集也是如此。
这种方法提供了可靠、高性能且内存高效的解决方案,用于从 php 中的 api 检索大量数据。
参考
- lazy json pages 包:https://github.com/cerbero90/lazy-json-pages
- 开源包作者:https://github.com/cerbero90
以上就是优化大规模 API 数据检索:最佳实践和 PHP 延迟收集解决方案的详细内容,更多请关注慧达安全导航其它相关文章!
免责 声明
1、本网站名称:慧达安全导航
2、本站永久网址:https//www.huida178.com/
3、本站所有资源来源于网友投稿和高价购买,所有资源仅对编程人员及源代码爱好者开放下载做参考和研究及学习,本站不提供任何技术服务!
4、本站所有资源的属示图片和信息不代表本站的立场!本站只是储蓄平台及搬运
5、下载者禁止在服务器和虚拟机下进行搭建运营,本站所有资源不支持联网运行!只允许调试,参考和研究!!!!
6、未经原版权作者许可禁止用于任何商业环境,任何人不得擅作它用,下载者不得用于违反国家法律,否则发生的一切法律后果自行承担!
7、为尊重作者版权,请在下载24小时内删除!请购买原版授权作品,支持你喜欢的作者,谢谢!
8.若资源侵犯了您的合法权益,请持 您的版权证书和相关原作品信息来信通知我们!QQ:1247526623我们会及时删除,给您带来的不便,我们深表歉意!
9、如下载链接失效、广告或者压缩包问题请联系站长处理
10、如果你也有好源码或者教程,可以发布到网站,分享有金币奖励和额外收入!
11、本站资源售价只是赞助,收取费用仅维持本站的日常运营所需
12、因源码具有可复制性,一经赞助,不得以任何形式退款。
13、本文内容由网友自发贡献和站长收集,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系1247526623@qq.com
转载请注明出处: 慧达安全导航 » 优化大规模 API 数据检索:最佳实践和 PHP 延迟收集解决方案
发表评论 取消回复