所以基本上我有一堆1 Gig数据文件(压缩的),只有文本文件包含带有时间戳和其他内容的JSON数据。

我将使用PHP代码将此数据插入MYSQL数据库。

我将无法在内存中存储这些文本文件!因此,我必须逐行处理每个数据文件。为此,我正在使用stream_get_line()。


其中包含的一些数据将是更新,一些将是插入。



使用Insert / Select / Update语句,或创建CSV文件并以这种方式导入会更快吗?

创建一个多数民众赞成在一个文件,然后从SQL执行它?

我基本上需要使用不存在的主键插入数据,如果主键确实存在,则更新数据上的字段。但是我将在“大数量”中执行此操作。

性能永远是问题。

更新资料
该表有22,000列,仅说其中的10-20不包含0。

最佳答案

我会将所有数据加载到一个临时表中,然后让mysql做繁重的工作。


通过执行create table temp_table as select * from live_table where 1=0;创建临时表
读取文件并创建与load data infile加载兼容的数据产品。
将数据加载到临时表中并为主键添加索引
接下来,通过在活动表和临时表之间进行内部查询来隔离更新。浏览并进行更新。
从临时中删除所有更新(再次使用临时表和活动表之间的内部联接)。
用一个简单的插入live_table来处理所有插入,如temp_table中的select *。
放下临时餐桌,回家喝些冰镇的饮料。


对于您的用例,这可能会过于简化,但稍作调整,就可以解决问题。

07-25 22:06
查看更多