代码之家  ›  专栏  ›  技术社区  ›  Darren

PHP cron调用导致数据不正确

  •  0
  • Darren  · 技术社区  · 6 年前

    我有一个有趣的问题;我从外部提供者获取数据,为了完整性,假设它返回如下:

    [
        [id: 1pm, item_a: 55, item_b: 180], // hour's passed so data is finished.
        [id: 2pm, item_a: 55, item_b: 180], // hour's passed so data is finished.
        [id: 3pm, item_a: 55, item_b: 180], // hour's passed so data is finished.
        [id: 4pm, item_a: 55, item_b: 180], // hour's passed so data is finished.
        [id: 5pm, item_a: 0, item_b: 0], // current hour - data keeps updating periodically
    ]
    

    我每小时运行一次cron调用,以获取最近一小时的元素( 5pm 在上述组中 ).

    请注意 item_a & item_b 为0。这是因为每小时输入的数据不断从第三方更新。这 不在设定的时间段内 ,这使得我很难准确地收集数据。当我为大约1400个不同的对象获取数据时,每个对象都会在第三方端以随机间隔进行更新,这使得我在一个小时结束后会得到错误的数据。

    我目前每15分钟运行一次cron作业,运行一个内部php脚本,该脚本执行以下操作:;

    • 获取最近的行
    • 对照第三方API进行检查
    • 如果 项目\u a 项目\u b 不同->我们更新所有行
    • 否则,脚本将退出自身。

    */15 * * * * curl my-website.com/api/path-to-update?access_key=my_access_key
    

    这导致数据a)延迟,b)偶尔低于应有的水平。

    我是否需要设置RabbitMQ之类的东西来处理持续的数据流/检查/等等?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Darren    6 年前

    最后,我创建了一个单独的调用,在接下来的15分钟内对“小时”数据进行最终检查。

    因此,电话最终是;

    $Api->data_fetch_new_hour();
    $Api->data_update_currency_hour();
    $Api->data_update_previous_hour();
    

    所有都在单独的cron作业上运行。