繁体   English   中英

在MySQL / PHP中处理递归

[英]Dealing with Recursion in MySQL/PHP

我已经开发了使用Laravel5 / MySQL构建的基于订阅的应用程序。 而且我正在处理从mysql获取发票的问题。 在每张发票上,我们必须显示几列,即“上一余额”,“付款”,“本月费用”,“到期日可支付”,“到期日后可支付”。 现在,“上一笔余额”是上一张发票的“按到期日付款”,而该笔费用又按“上一笔余额”-“付款” +“本月费用”计算。 因此,这里开始递归,并将继续直到获取数据库中的所有记录。 这对于一张发票也很好用。 但是,当我尝试获取多个(100〜200)服务器时,内存将耗尽。 附有约1.3万张发票的表格。

为解决此问题,在发票生成时,我在表“ payable_by_due_date”中添加了新列,以更新此列。 更改并更新所有记录后,我尝试使用〜1000张发票,并且花了3〜4秒钟来提取所有记录,为所有发票制作PDF并将它们全部打包为一个zip文件并将该zip文件移交给用户下载。

但是这种方法存在一个大问题,如果将来任何发票需要更正,该特定发票之后生成的所有发票都需要手动更新该怎么办。

因此,如果你们中的任何人都可以帮助我摆脱这个问题,我将非常感激。

没有明显的回答你的问题-它的更多的方式比什么都重要,而且是非常具体的应用程序。

几点:

关于内存-是的,如果您要递归地遍历大数据集,那么这很可能会使您的服务器崩溃,数据集越大,性能越差。

在这种情况下,如果可能,请使用laravel队列将繁重的数据处理工作卸载到后台。 例如,在用户请求事件时触发该事件,然后在前端向用户显示一条通知,告知您“我们正在处理您的请求,完成后我们将通过链接向您发送电子邮件”-类似于Google的处理方式“ takeout”( https://www.google.com/settings/takeout )有效。

关于重新计算-与第一点几乎相同。 如果将其推入后台进程,则大数据处理的伤害将较小。

同样,这是特定于应用程序的。 如果可能的话,将问题分解为具有特定要求/结果的较小的可回答问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM