我们正在开发一项功能,允许我们的用户将他们自己的客户/营销数据库从他们上传到我们服务器的CSV文件导入我们的系统。 我们在亚马逊RDS上由MySQL支持的Amazon EC2上的Ubuntu 10.04上使用PHP。
我们目前得到的是一个使用LOAD DATA LOCAL INFILE的脚本,但它有点慢,当真实用户开始上传超过100,000行的CSV文件时,它会非常慢。
我们有一个自动化服务器在后台运行多个任务以支持应用程序,所以这可能是移交给该服务器(或服务器组)的东西? 因此,用户将上传CSV文件,我们将其粘贴在S3存储桶中,并在数据库中删除一行将该文件链接到给定用户,或使用SQS或某些东西让自动化服务器知道导入它,那么我们只是告诉用户他们的记录是否正在导入并在接下来的几分钟/小时内逐渐显示出来?
还有其他人有过这方面的经验吗?我的逻辑是正确的还是我们应该朝着完全不同的方向发展?
提前致谢。
答案 0 :(得分:1)
我的公司通过cron做到了这一点。
我们允许用户上传CSV,然后将其发送到目录等待。每5分钟运行一次的cron检查上传时生成的数据库条目,该条目记录用户,文件,日期/时间等。如果在DB中找到尚未解析的文件,它将根据该文件访问该文件。 filename,检查以确保数据有效,运行USPS地址验证,最后将其放入主用户数据库。
我们有类似的设置功能来发送大批电子邮件,用户横截面的模型抽象等等。总而言之,它运作良好。三台服务器可以充分处理数百万条记录,每次导入都会加载数万条记录。