PHP 通过许多调整将 JSON/CSV 匹配到 SQL 数据库 (cakePHP)

标签 php mysql csv cakephp large-files

我想使用 cakePHP 框架将 JSON 文件(也可作为 CSV)插入到 mySQL 数据库中。基础知识很清楚,但周围的要求却让它变得困难:

  1. JSON/CSV 文件很大(约 200 MB,最多 200,000 行)。
  2. 该文件包含多个字段。这些字段需要映射到mySQL数据库中不同名称的字段。
  3. CSV 包含一个名为 art_number 的字段。该字段也存在于 mySQL 数据库中。 art_number 是唯一的,但不是 mySQL 中的主键。如果 CSV 和数据库具有相同的 art_number,我想更新 mySQL 记录。如果不是,则应创建新记录。
  4. CSV 文件的多个字段在存储之前需要进行处理。还需要添加其他字段。
  5. CSV 包含image_URL。如果它是数据库的新记录(未知 art_number),则应复制、修改该图像(使用 imagick)并将其存储在服务器上。
  6. 整个作业需要每天运行。

正如您所看到的,存在很多限制(内存、运行时等)。但我不确定如何从架构的角度来解决这个问题。例如。我应该首先尝试将所有内容插入单独的“导入”数据库表中,然后单独执行这些步骤吗?将数据库中的 ID 映射到 CSV 行的好方法是什么?如果我能够根据 art_number 映射 ID,Cakephp 就能够创建新记录或更新现有记录。另外,更改和复制多达 200,000 张图像似乎也是一个大问题。那么如何将其分解为更小的 block 呢?

如果您能在这里帮助找到正确的策略,我将不胜感激。在内存和速度方面我需要考虑什么?将流程分成不同的工作是否有意义? oyu 会做什么/如何做到这一点?

最佳答案

I would appreciate if you could help find the right strategy here. What do I need to consider in terms of memory and speed?

  • Use a shell用于进口
  • Read the data in chunks X 行或 X 数据量以避免内存问题,然后处理这些 block 。这是一个简单的循环。
  • 如果处理需要很长时间,请考虑使用类似 Resque 的作业队列。如果需要,您可以向用户更新进度状态。

Doe sit make sense to split the process into different jobs? What/how would oyu do that?

这取决于要求、您的处理需要多长时间以及您的系统可以并行处理多少数据,而不会达到 100% CPU 使用率并有效减慢站点速度。如果发生这种情况,请将处理移至另一台计算机或使用 the nice command 限制该进程的 CPU 使用率.

关于PHP 通过许多调整将 JSON/CSV 匹配到 SQL 数据库 (cakePHP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32966013/

相关文章:

php - 使用 javascript 在 php 中获取记录行

php - 类事件不在页面上工作

php - 使用 PHP/MySQL 导入 CSV 数据

php - cocoa URL API : how can I return an error from the server *and* still download the data requested?

mysql - 只显示一条记录

php - 此 mySQL 查询出现问题 : (using WHERE with AS clause)

php - 删除用户最佳实践?

使用 UTF8 编码将 Excel 转换为 CSV

python-2.7 - AWS Lambda - 在内存中生成 CSV 并将其作为电子邮件附件发送

php - 是否可以将 iframe 转换为 html?