如何处理海量数据集并提供实时用户体验



我是一家主要生产工具的网络营销公司的程序员。这些工具具有某些要求:

  • 它们在浏览器中运行,并且必须在所有浏览器中工作。
  • 用户要么上传要处理的内容 (.csv),要么提供 URL 并进行 API 调用以检索有关它的信息。
  • 他们正在数千行数据中移动(想想大型数据库)。这些工具实际上运行了几个小时,通常是通宵达旦。
  • 用户必须能够在处理并呈现给他们的信息时观看实时。

目前我们正在用PHP,MySQL和Ajax编写。

我的问题是如何处理大量数据并在工具运行时提供用户体验。目前,我使用自定义队列系统来发送 ajax 调用并将行插入表中或将数据插入div。

这种方法是一个巨大的痛苦,不可能是正确的方法。我应该使用模板系统还是有更好的方法来刷新包含大量数据的页面块。我的意思是很多数据,因为我们接近最大化PHP内存,这是我们一直在寻找的东西。

我也很乐意制作它,以便这些工具可以自己在服务器上运行。我的意思是上传一个.csv并关闭浏览器窗口,然后在工具完成后向用户发送电子邮件。

有没有人为我提供比使用 .ajax 调用更好的方法(编程标准)?谢谢。


我想用一些注释更新,以防有人有同样的问题。我正在研究以下内容,看看哪个是最好的解决方案:

  • 光滑网格/数据表
  • 齿轮人
  • 网络套接字
  • 棘轮
  • 节点.js

这些没有特定的顺序,我选择的那个将基于什么对我的问题有效,什么可以被我部门的其他部门使用。当我选择黄金框架时,我会更新。

首先,你不能通过Ajax处理大数据。为了使用户能够实时观看进程,您可以使用Web套接字执行此操作。由于您在PHP方面经验丰富,我可以向您推荐Ratchet,这是非常新的。

另一方面,为了进行计算和存储大数据,我会使用NoSQL而不是MySQL。

由于您已经有点时间紧迫,因此迁移到 Node.js 可能对时间不敏感。它还有助于解决通知用户结果何时准备就绪的问题,因为它可以在不轮询的情况下进行浏览器通知推送。当它使用Javascript时,你可能会发现你的一些客户端代码是可重用的。

我认为您可以使用某种队列管理器在后台运行所需的内容。我使用类似于 CakePHP 的东西,它让我可以在后台异步运行时间密集型进程,因此浏览器不需要打开。

这样做的另一个好处是它是可扩展的,因为很容易增加运行的队列工作器的数量。

基本上,使用PHP,您只需要一个每隔一段时间运行一次的cron作业,该作业启动一个检查队列数据库以查找待处理任务的工作线程。如果没有找到,它将继续循环运行,直到出现一个。

最新更新