1

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

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

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

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

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

创建一个批量操作的文件,然后从 sql 执行它?

我基本上需要使用不存在的主键插入数据,如果主键确实存在,则更新数据字段。但我会在大量的情况下这样做。

性能始终是问题。

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

4

1 回答 1

0

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

  1. 通过执行创建临时表create table temp_table as select * from live_table where 1=0;

  2. 读取文件并创建一个与加载兼容的数据产品load data infile

  3. 将数据加载到临时表中并为您的主键添加索引

  4. Next 通过在活动表和临时表之间进行内部查询来隔离您的更新。浏览并进行更新。

  5. 从临时表中删除所有更新(再次使用它和活动表之间的内部连接)。

  6. 使用简单的插入到 live_table 作为 select * from temp_table 处理所有插入。

  7. 放下临时桌子,回家喝一杯冰镇饮料。

对于您的用例,这可能过于简化,但稍作调整就可以了。

于 2013-05-27T20:01:22.280 回答