【发布时间】:2012-02-07 21:22:18
【问题描述】:
我正在尝试将巨大的 .csv 文件导入数据库。它是 Drupal 数据库,我将产品导入节点、content_type_ 和 uc_products 表。但这并不重要,因为我停止使用 Drupal 函数 node_load 和/或 node_save 并直接通过 SQL 命令插入/更新记录。
场景:
- 将整个 csv 文件从本地服务器(大约 40MB)读取到 变量(以防止访问每条记录的文件)
- 将其解析为 每行数组
将每一行解析为字段
检查数据库中的记录是否存在(1条SQL选择,比较特定字段)
- 如果存在,更新它(1 个 SQL 更新)
-
如果不存在,插入(3次插入,1次更新)
6.1。如果record有图片代码且与数据库中的不一样,则从外部服务器下载(curl)新的图片文件并保存到本地服务器。
1 次延迟插入日志表
当我运行这个脚本时,我得到了 502 代理错误(原因:从远程服务器读取错误)。 10k 导入记录和页面停止加载。但是,导入仍在继续(新记录仍在添加到表中)。这会在 20k-26k(尝试多次)记录后停止。
两个问题: 那个代理错误是什么,为什么我会得到一个? 如何进一步优化我的脚本?是否有其他常用方法可以将大量数据导入 MySQL?
非常感谢。
【问题讨论】:
-
对于 SQL 的东西,两天前我不得不做类似的事情 - 来自 CSV 文件的超过 600,000 条记录。我所做的是编写一个脚本来将 CSV 转换为 INSERT 语句(在您的情况下,您可以使用 WHERE 子句或 EXISTS 来使用条件插入)。我最终得到了一个 47m 的 SQL 文本文件,然后我将其与
mysql -uuser -ppass dbname <file.sql一起使用。
标签: php mysql drupal csv import