PHP 7 - 在此特定程序的请求之间存储数据

时间:2017-10-19 16:04:36

标签: php apache php-7

我有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非常错误。< / em>

1 个答案:

答案 0 :(得分:0)

你应该知道,每秒3次插入查询对于RDBMS来说是非常低的(或者你只需​​花费10美元用于额外的RAM模块:)

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