【问题标题】:Laravel - Efficiently consuming large external API into databaseLaravel - 有效地将大型外部 API 消耗到数据库中
【发布时间】:2019-12-09 01:42:42
【问题描述】:

我正在尝试使用 Paypal API 交易端点。

我想获取给定帐户的所有交易。这个数字可能在数百万笔交易中达到数十万。对于这些事务中的每一个,我都需要将其存储在数据库中以供排队的作业处理。我一直在试图找出用 Laravel 提取这么多记录的最佳方法。 Paypal 的最大请求项目限制为每页 20 个。

我最初的想法是在用户向我提供获取前 20 个项目并处理它们的 API 凭据时创建一个作业,然后从包含要使用的起始索引的第一个作业分派一个作业。这将永远循环,直到它出错。尽管这似乎效果不佳,因为它会导致网关在保存这些 API 凭据时超时,并且对 API 的请求最终会超时(在获取所有事务之前)。我还应该提到事务的总数是未知的,因此链接似乎不是答案,因为没有办法知道要调度多少工作......

想法?获取 API 数据是否最适合工作?

【问题讨论】:

    标签: laravel laravel-queue laravel-api


    【解决方案1】:

    是的,工作是路要走。我对 paypal api 不熟悉,但似乎请求的速率有限paypal rate limiting.. 您可能想稍微延迟您的 api 请求.. 您也可以创建一个类来通过跟踪您的最新请求来监控您的 api 请求消耗在工作中,您可以确定何时触发下一个请求并将其记录在数据库中...

    我的谦虚建议 请不要提取所有数据,您的数据库会很快变得臃肿,并且每次拥有新帐户时都需要扩展,这不是一件容易的事。

    【讨论】:

    • 是的,问题是需要根据事务处理数据。但是我无法在处理后转储数据,因为由于退款,该数据最多可以更改 X 天(我认为是 180 天)。所以我必须保持至少那么长时间。我们正在做一些事情来减轻规模,但我目前仍在研究/战略领域。
    【解决方案2】:

    您可以在第一个作业结束时分派相同的作业,该作业查询您当前的数据库以查找该作业的事务的起始索引。

    所以即使你的工作出错了,你也可以再次发送它,然后它会从之前结束的地方恢复

    【讨论】:

    • 这个问题是数据库中行的ID与事务索引不是1:1的。有些记录由于各种原因没有存储,所以我必须有一个单独的行来存储这些数据。这是可行的,但我一直在努力避免。
    • 也许保留API的事务索引?
    【解决方案3】:

    您可能需要将您的应用程序与另一个数据引擎(如 AWS)链接起来,无论如何我认为最好的想法是创建一个 APi,只提取最重要的数据、索引,并将所有大数据保存在另一个端点中,您可以在其中如果您需要,可以联系他们

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-11
      • 2019-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-04
      • 1970-01-01
      相关资源
      最近更新 更多