【问题标题】:PHP 7 - Storing data between requests for this particular programPHP 7 - 在此特定程序的请求之间存储数据
【发布时间】:2017-10-19 16:04:35
【问题描述】:

我有 N 台设备通过 HTTP (POST) 请求将它们的数据全部发送到同一个 URL(我们称之为“upload.php”)。每分钟大约有 100-150 个 POST 请求被发送到 upload.php。假设设备发现了气球并发送了这些数据:

[ {
  "timestamp" : 1507320877294,
  "color" : "red",
  "balloon" : {
    "x" : 42,
    "y" : 312,
    "z" : 287,
  }
} ]

..

[ {
  "timestamp" : 1607320877294,
  "color" : "yellow",
  "balloon" : {
     "x" : 42,
     "y" : 312,
     "z" : 287,
  }
} ]

我在数据库中有一个如下所示的表,并按以下方式聚合数据:

+---------------------------------------------------------------------+
| spotter_sensor_id | hour_collected | red_balloons | yellow_balloons |
+---------------------------------------------------------------------+
| 992               | 17:00:00       | 5            | 5               |
+---------------------------------------------------------------------+

我不想在每次upload.php 收到发布请求时进行更新/插入查询。我宁愿暂时存储数据,然后每 10 分钟左右进行一次查询,例如:

INSERT INTO table
    (spotter_sensor_id, hour_collected, red_balloons, yellow_balloons)
VALUES
    ('992', '$hour_collected', '$red_balloons', '$yellow_balloons')
ON DUPLICATE KEY UPDATE
    red_balloons = $red_balloons + VALUES(red_balloons),
    yellow_balloons = $yellow_balloons + VALUES(yellow_balloons);

...表示在这 10 分钟内每个传感器发现了多少气球。

对于使用 PHP 7 将中间数据从 upload.php 存储到另一个脚本(我们称之为“send.php”),我有哪些选择?最好是数据死锁或并发不会成为问题的选项?


注意:我的环境是带有 PHP 7 的 Windows Server 2016。我查看了 OPCache,但没有找到适用于 PHP 7 的 DLL——我从 GitHub 上分叉的一个非官方的 DLL 有很多错误。

【问题讨论】:

  • upload.php 的每次执行都是唯一的,所以......临时文件,临时数据库表是显而易见的。不知道还有没有别的...
  • 使用内存数据库怎么样?我见过Redis.io 的一些实现
  • 为什么,这背后的原因是什么 - 任何类型的性能问题,或者......?
  • @CBroe 我有几十个传感器每秒发送数据,每次传感器上传数据时都无法进行 SQL 查询。最好每 5 分钟聚合一次并在一个 sql 命令中发送数据

标签: php apache php-7


【解决方案1】:

您应该知道,对于 RDBMS 来说,每秒 3 个插入查询非常低(否则您只需要花费 10 美元购买额外的 RAM 模块:)

如果您确实遇到了瓶颈(因为您的硬件严重不足,或者因为实际上您每秒有数百而不是几十次插入),那么您可能需要切换技术。 关系数据库可能不是正确的解决方案。建议使用 Redis 缓存,您也可以尝试使用 noSQL 解决方案或内存表。但最简单的解决方案可能只是在发射器端(您的传感器)整合数据。

【讨论】:

    猜你喜欢
    • 2017-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多