运行R脚本时网站上的加载时间较长

时间:2015-04-29 16:48:57

标签: javascript php mysql sql r

我正在尝试在网页上查询MySQL数据库。在我的R脚本中,我有4个不同的“查询”函数以及多个计算,这些计算将向我的网页显示统计图,所有这些都依赖于“N”变量。我正在使用PHP(使用shell_exec)来调用R并发送“N”。我正在使用RMySQL& R中的ggplot2库。

仅使用1个基本查询函数运行我的R脚本(包括dbConnect(),dbGetQuery和on.exit(dbDisconnect()),然后使用png(),plot()和dev.off()需要~15秒在我的网站上显示图表。

有2个功能和2个绘图,我甚至没有耐心等待它看看它是否有效,因为加载时间太长了。查询本身相当冗长(通过循环可能更容易),但我已经测试它们通过MySQL工作,我不知道如何避免使用SQL的循环错误。

  • 长加载时间是否可能是因为每个函数都有dbConnect / dbDisconnect?我应该只在脚本中执行一次(即创建一个新的“连接”功能,然后从此处调用其他功能)?

  • 我是在运行多个冗长的查询请求吗?如果是这种情况,如果我将每个“查询函数”拆分为单独的R脚本,然后每个“shell_exec”并允许用户选择要显示的图形(即允许执行的HTML / PHP中的复选框)会更好吗每个脚本/图表的所需)?

通过测试,我知道我的逻辑存在,但我可能完全错过了一些东西。我想加快这个过程,所以网站用户不必永远盯着加载屏幕,我实际上可以获得一些切实的结果。

对于冗长的请求感到抱歉,我感谢您提供的任何帮助!如果你想看到网页或我的任何代码以获得更好的想法,我可以上传并分享。

谢谢!

编辑:还应该注意的是,我正在使用while循环(x <100)进行某些计算;我知道R中的循环通常被认为是昂贵的过程,但整个矢量化的东西(我认为这就是名字?)是我的头脑。

1 个答案:

答案 0 :(得分:0)

您的请求可能非常苛刻,无法同步执行。您可以改为使用队列系统。发出请求时,会将其发送到队列。当服务器准备就绪时,结果将异步输出。在此期间,您可以将用户重定向到另一个页面,并且可以了解结果何时可用。

以下是一些建议: