在Heroku应用程序上将大文件导入mysql



我需要一些帮助。

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

问题是,它的文件很大(永远都很大),而且函数需要太多时间才能完成(大约90秒)。heroku的超时时间是30秒,这是无法改变的。

我试着使用Heroku调度器(像cron一样),但最小频率是10分钟,使用这个调度器可能需要90秒的脚本将需要30分钟,因为正如我所说,Heroku的超时是30秒。

好吧,我能做什么?有替代的时间表吗?

导入示例:

CSV

name,productName,points,categoryName,coordName,date

MYSQL

[用户]

userID
userName
categoryID
coordID

【产品】

productID
productName

[cords]

coordID
coordName

【类别】

categoryID
categoryName

[点]

pointID
productID
userID
value

在所有表中,我都需要进行选择,看看类别coord等是否已经存在。如果存在,则返回id;如果不存在,则插入新行。

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

谢谢!

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

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

  • 查询临时表中的所有类别,但查询活动数据表中的而非
    • 在活动表中创建这些类别
  • 查询临时表中但不在活动数据表中的所有坐标。
    • 在活动表中创建coords
  • 你明白了。。。对所有必要的数据重复上述步骤
  • 然后通过INSERT将临时表中的数据导入到活动表中。。。SELECT查询。想想你需要什么样的交易/锁定。可能是查询的顺序会产生影响。但如果你只是添加数据,我认为一个相当低的隔离级别应该可以……但不确定。但也许这不是你现在关心的问题

相关内容

  • 没有找到相关文章

最新更新