您好!请不要被我的文字墙吓到......
我的工程团队和我正在尝试将HTML / PHP与MySQL数据库相关联,同时使用R编程为网站用户提供快速的图形分析。
我们的想法概要:
我们在R代码和我们计划的计划方面取得了很多进展,但我们的主要问题在于数据的上传。
*收据文件都与此类似:
有多个文件,每个文件的大小约为20 MB。破折号表示与日期相关的收据的开始/结束。
我们的问题:
根据我们目前的知识,考虑“---”分隔符的唯一方法是使用if语句。考虑到文件长度的变化,我们运行一个while循环直到结束。这些都是用PHP完成的。这样我们就可以将'零售商ID'和'Date'作为'收据ID'和的每一行的变量找到“价格”。之后,我们将这4个变量逐行上传到我们的MySQL数据库中。我们决定忽略'Tax','Total'和'付款方式'。
例如,我们希望数据库中的前几个条目看起来像这样查询数据:
RetailerID | Date | ProdID | Price
1 | 01/01/2014 | 79 | $7.93
1 | 01/01/2014 | 1 | $24.62
显然,这需要永远。它导致我们的网站有一个致命的超时错误,我们无法更改,所以我们必须在我们的循环中设置一个限制(cnt <20000),以便在我们的数据库中获取内容。它适用于我们需要的,但不是我们想要的,因为收据文件超过1,000,000行!
我们一直在探索这个SQL代码的用法:
"LOAD DATA LOCAL INFILE '$file'
INTO TABLE Receipts
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n';";
无论大小,几乎可以立即上传整个收据。尽管如此,除非我们使用while循环,否则我们不知道如何删除破折号或将'Date' / '零售商ID'重复为变量。我们希望完全消除这一点,因为它会大幅减慢我们的网站速度。
我认为这将是一种更简单的方法,但在线的所有技术资源往往有点过头了。在阅读了其中的一些内容之后,我们一直在探索Java的用法,但是再次 - whooooooosh。
这是我们第一次使用PHP和MySQL,所以任何朝着正确方向的推动都会很棒。必须有办法摆脱我们致命的循环!
答案 0 :(得分:0)
在mysql中尝试多次插入查询。它允许您使用一个insert语句来插入一大堆记录。更快,更快。
http://www.electrictoolbox.com/mysql-insert-multiple-records/
答案 1 :(得分:0)
您应该同时进行多次插入,但不能进行大量插入。
解释自己:
Insert into blabla VALUES (), (), (), (), .... [x200 000]
=很长时间用于mysql
Insert into blabla VALUES ()
[x200 000] =很长
Insert into blabla VALUES () [x100]
[x2000] =更快
一个非常大的交易很难处理,也有大量的小交易。所以你必须做适度的交易,但其中很多都是。工作更聪明,而不是更难:)
我希望它至少有点清楚......