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


PHP match JSON/CSV into SQL database with many adjustments (cakePHP)

我想使用cakePHP框架将JSON文件(也可用为CSV)插入mySQL数据库。基础是清楚的,但是周围的需求使它变得困难:

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

正如你所看到的,有很多限制(内存,运行时等)。但我不确定如何从建筑的角度来解决这个问题。例如,我是否应该首先尝试将所有内容插入单独的"导入"数据库表,然后分别运行步骤?从数据库获取映射到CSV行的id的好方法是什么?如果我能够根据art_number映射ID, Cakephp就能够执行创建新记录或更新现有记录。另外,更改和复制多达20万张图片似乎是一个大问题。那么如何将其分解成更小的部分呢?

如果你能帮我找到正确的策略,我将不胜感激。在内存和速度方面我需要考虑什么?将流程拆分为不同的工作有意义吗?你会怎么做?
如果你能帮我找到正确的策略,我将不胜感激。在内存和速度方面我需要考虑什么?
  • 使用shell导入
  • 以X行或X量的数据块读取数据,以避免内存问题,然后处理这些块。这是个简单的循环。
  • 如果处理将需要很长时间,考虑使用像Resque这样的作业队列。如果需要,您可以向用户更新进度状态。

将流程拆分为不同的作业是否有意义?你会怎么做?

这取决于需求和处理所需的时间,以及系统可以并行处理多少,而不会达到100%的CPU使用率,从而有效地降低站点的速度。如果发生这种情况,请将处理转移到另一台机器上,或者使用nice命令限制该进程的CPU使用。