首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对多个数据库中的每一行表执行多个操作

对多个数据库中的每一行表执行多个操作
EN

Software Engineering用户
提问于 2017-05-19 15:38:02
回答 1查看 140关注 0票数 0

我正在从事一个使用php (无框架)管理员工薪资的项目。此应用程序由客户端(有自己的数据库)组成。每个数据库都由客户的员工和他们的工资组成。有关特点如下:

  • 管理员每个月可以为特定客户端中的所有员工处理两次薪资单。当单击"process“按钮时,将为每个员工创建一个pdf文件并存储在一个目录中。
  • 管理员可以在特定客户端的员工表中选择员工,然后在单击按钮时向每个选定的员工发送包含其pdf文件的电子邮件。对于每个员工,pdf文件是不同的。
  • 管理员可以在客户端表中选择客户端,然后当单击按钮时,为每个客户发送一封包含其pdf文件的电子邮件。对于每个员工,pdf文件是不同的。

我创建pdfs和发送电子邮件的最初解决方案是迭代从每个客户端数据库中检索到的员工列表,并在单击按钮时执行一些操作。但是,当我选择40名员工使用fpdf为他们创建pdf文件时,应用程序花了4秒的时间进行芬兰语。这是不可接受的,因为每个客户端最多可能包含5000名员工。使用phpmailer发送电子邮件也是如此,发送三封电子邮件需要25秒。

因此,我开始寻找一个多线程解决方案,可以同时执行每个操作。然而,线程v3只在CLI中工作,我们使用的是php 7。我不知道如何使用多个进程,但我读到它可能是完全的。

是否有一个可行的、快速的解决方案来实现我在php中想要的?我应该用不同的语言吗?

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2017-05-19 17:15:26

它是否需要实时发生,或者您是否可以使用“批处理”解决方案?

批处理解决方案将涉及一些额外的步骤。您需要跟踪您的批处理,可能是在新的batchbatch_job表中。管理员可以创建一个新的批处理来生成PDF,而PDF生成器的每一个执行都是一个批处理。您需要有一些在后台运行的其他进程,并检查批处理表,以查看需要运行什么。界面中还应该有一些内容,这样用户就可以看到已经创建、正在运行、完成或失败的批处理。

基本上,工作流应该是这样的:

  1. 管理员用户选择5000名工作人员为其生成PDF。
  2. Admin创建一个包含5000个"Generate“作业的批处理(每个作业都有一个描述,描述它需要为哪个工作人员生成PDF )。
  3. 服务器上的后台进程检测到有一个新批处理,并开始执行作业。
  4. 管理员用户可以监控网络用户界面的进度。
  5. 作业执行器在批处理表完成/失败时使用状态更新批处理表。

此解决方案的优点是批处理过程可以在后台运行。PDF生成可以是并行的,串行的,或者你选择的任何其他方式。

缺点:实现这一点可能需要超过一两个小时的编码;)如果您预期有其他业务流程对非常大的集合操作,则可能值得认真考虑这一点。

如果您的硬件能够在一分钟内实际支持生成5000个PDF,并且您真的希望这是实时的,那么您可以实现上述解决方案的一个更短的版本(嗯,它不是实时的,但比我的其他建议更好):

  1. 管理员选择5000件东西来创建PDF。
  2. Web应用程序将关于这5000的所有信息传递给在后台异步运行的单个进程(不确定如何在PHP中这样做,需要进行一些额外的研究)。
  3. 这个过程会不断发生变化,让用户可以自由地做其他事情。
票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/349284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档