在这个上使用PHP(1900秒的时间限制和超过1GB的内存限制)和MySQL(使用PEAR :: MDB2)......
我正在尝试创建一个搜索引擎,它将从mysql数据库中的站点源加载数据。有些网站有相当大的Feed,其中包含大量数据(例如,只有一个文件中有超过80,000条记录)。在将记录插入数据库之前完成对每个记录的一些数据检查(可能还插入或更新mysql表的数据检查)。
我的问题是,你们许多人可能已经理解......时间!对于Feed中的每条记录,有超过20条支票,对于例如:10.000条记录的Feed,可能会有> 50.000条插入数据库。
我尝试用两种方式做到这一点:
数据库使用不断查询的每个字段的索引。 PHP代码被调整而没有额外的变量,SQL查询是简单的select,update和insert语句。
设置时间限制更高,内存也不是问题。问题是我希望这个操作更快。
所以我的问题是: 如何更快地导入Feed的数据?还有其他我可能不知道的提示吗?
答案 0 :(得分:2)
使用LOAD DATA INFILE
通常比使用INSERT
执行批量加载快许多倍。
即使您必须在PHP代码中进行检查,将其转储到CSV文件然后使用LOAD DATA INFILE
,这也是一个很大的胜利。
答案 1 :(得分:1)
如果你的导入是一次性的,并且你使用全文索引,那么加速导入的简单调整就是删除索引,导入所有数据并在导入完成后添加全文索引。这要快得多,according to the docs:
对于大型数据集,速度要快得多 将数据加载到表中 没有FULLTEXT索引然后创建 之后的索引,比加载 将数据存入已存在的表中 FULLTEXT指数。
答案 2 :(得分:0)
你可以看一下php的PDO扩展,它支持preapeared语句。您还可以考虑在mysql中使用存储过程。 2)您可以查看其他数据库系统,如CouchDB等,并牺牲性能的一致性。
答案 3 :(得分:0)
我设法在1800秒内使用INSERT DELAYED命令将插入的数据加倍。 “LOAD DATA INFILE”建议并非如此,因为数据应该得到强有力的验证,这会弄乱我的代码。 感谢您的所有答案和建议:)