在Heroku应用程序

时间:2016-03-28 20:27:24

标签: php mysql heroku import timeout

我需要一些帮助。

我在Heroku上有一个php应用程序。在这个应用程序中,有一个上传csv文件的表单,要在Mysql(cleardb)上导入。

问题是,文件大(总是很大),以及它花费太多时间完成的功能(大约90秒)。 heroku的超时时间为30秒,并且没有办法改变它。

我尝试使用Heroku Scheduler(如cron),但使用此调度程序的最小频率为10分钟,并且可能需要90秒的脚本需要30分钟,因为正如我所说, heroku的超时时间为30秒。

好吧,我该怎么办?有另一种调度程序吗?

导入示例:

CSV

name,productName,points,categoryName,coordName,date

MYSQL

[用户]

userID
userName
categoryID
coordID

[产品]

productID
productName

[COORDS]

coordID
coordName

[类别]

categoryID
categoryName

[分]

pointID
productID
userID
value

在所有表中,我需要进行选择以查看类别,坐标等是否已经存在。如果存在,则返回id,如果不存在,则插入一个新行。

我认为没有办法减少时间执行时间。我试图找到一种方法将时间表减少到2分钟,3分钟等等。因此,在大约10分钟内,所有线路都将被导入。

谢谢!

1 个答案:

答案 0 :(得分:1)

这就是我开始的原因(因为它相对简单/快速实施,应该给你一个参考点和一些在短时间内进行进一步测试的余地):

将所有数据按原样导入临时表(如果服务器的RAM允许您也可以尝试memory engine)。
然后,导入数据之后,创建以下查询所需的索引(并通过EXPLAIN或任何其他工具检查,以显示索引是否以及如何使用): / p>

  • 查询临时表中的所有类别,但实时数据表中
    • 在实时表格中创建这些类别。
  • 查询临时表中但不在实时数据表中的所有coords。
    • 在直播表中创建这些坐标。
  • 你明白了......重复所有必要的数据。
  • 然后只需通过INSERT...SELECT查询将临时表中的数据导入到实时表中。想想你需要什么样的交易/锁定。 可能是查询的顺序会产生影响。但是,如果您只是添加数据,我认为相当低的隔离级别应该......但不确定。但也许这不是你现在关注的问题?