我正在使用 PHP 和 MySQL 开始一个新项目,大致如下:
每分钟我都会从不同用户的 API 中获得一份待办事项列表。
例子:
user1 send $1 to user2
userx send $2 to usera
userw send $0.50 to user2
etc..
假设 user1 想向 user2 发送 $1。有两种可能,成功或不成功,因为资金不足或用户拼写错误的用户名。如果不成功,我会向用户发送一条消息。
我现在面临几个选择:
选项1
创建一个包含需要处理的事务的数据库表,并使用每分钟处理一次的 cronjob。这里的风险是脚本可能会因错误或超时而运行,而其他事务仍会在数据库表中显示 In Progress。所以我需要第二个脚本来检查时间戳。
选项 2
创建一个 API 或函数,在我收到它们并给我一个响应后,它会为每个事务调用。然后我可以调用另一个 API 或函数来处理该响应或继续下一个事务。但是,我仍然必须将它们放在数据库表中,因为如果脚本停止执行,我不能冒险丢失它们。所以它的工作原理如下:将所有事务放在数据库表中 - 开始事务 - 完成事务后从表中删除 - 开始事务 2。
这两个选项都有缺陷,因为您不知道交易列表会有多长。如果它很长,PHP 绝对不是长时间运行的最佳选择 - 使用将超时设置为零是有风险的。我正在寻找一个可以与 PHP 一起扩展的解决方案。所以我在考虑选项3。
选项 3(最佳解决方案?)
使用 API 返回 10 个事务。
在数据库中设置一个标志来说明它们被发送到一个脚本和时间戳来说明它们何时被发送
PHP 脚本从 API 检索 10 个事务 - 处理 10 个事务。
一旦事务完成 - 从该表中删除它并将其复制到已完成的事务表中。
如果发送时间大于 X 分钟(基于 10 个事务的执行时间的上限),则每 3 分钟检查一次 cronjob 脚本。如果它更大 - 将它们设置为不发送 - 这样它们就可以再次发送出去。
正如你所看到的,我写下了我对此的整个思考过程,并正在寻找输入。肯定有我错过的东西。另请注意,这些不是真正的金融交易——这只是我可以用来说明的最好的元数据。