【发布时间】:2015-02-10 02:29:10
【问题描述】:
我有一个日程安排应用程序,允许用户使用每周模板批量创建活动。这通过将模板课程通过AJAX 发布到PHP file 来实现,该PHP file 采用模板并将其复制所需的次数。它一次必须创建的事件数量可能在 200-800 之间,具体取决于。
我遇到的问题是这些查询需要很长时间才能完成,这会导致网站挂起,有时在等待所有条目完成时会超时。
一个简化的例子:
$events = array('valid array of all events and their details');
foreach($events as $event) {
$query = 'Valid SQL with individual event detaisl';
mysqli_query($connection, $query);
}
实际上会进行更多操作,例如,计算开始时间和结束时间,将用户与 junction tables 关联等。这必须运行 200-800 次才能为模板生成的每个单独事件创建一个条目.
我将如何加快速度?
非常感谢任何见解!
更新:我已经尝试增加 SQL 实例的层级。它对花费的时间没有任何影响。
【问题讨论】:
-
你能把这项工作卸载到任务队列吗?用户是否需要在响应中看到这些操作的结果?
-
我猜它可以被卸载。他们的想法是选择一个时间范围并单击“导出”。然后它会启动并使用模板在日历上创建事件并将用户重定向到日历以便他们可以看到它们。
-
Guy,正如 Stuart 指出的那样,一种选择是将写入委托给任务。当您使用 AJAX 时,您可以稍后异步更新状态。另一个建议是在 Cloud SQL 实例的设置中将您的实例配置为与您的应用程序位于同一位置。第三个是优化 SQL 语句,使所需锁的数量接近最低限度。
标签: php mysql google-app-engine google-cloud-sql