Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP通过多次调整将JSON/CSV匹配到SQL数据库中(cakePHP)_Php_Mysql_Csv_Cakephp_Large Files - Fatal编程技术网

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

PHP通过多次调整将JSON/CSV匹配到SQL数据库中(cakePHP),php,mysql,csv,cakephp,large-files,Php,Mysql,Csv,Cakephp,Large Files,我想使用cakePHP框架将JSON文件(也可用作CSV)插入mySQL数据库。基本原理很清楚,但周围的要求使其难以实现: JSON/CSV文件很大(约200 MB,最多200.000行) 该文件包含多个字段。这些字段需要映射到mySQL数据库中具有不同名称的字段 CSV包含一个名为艺术编号的字段。此字段也存在于mySQL数据库中。艺术号是唯一的,但不是mySQL中的主键。如果CSV和数据库具有相同的艺术编号,我想更新mySQL记录。如果没有,则应创建新记录 CSV文件的几个字段在存储之前需要进

我想使用cakePHP框架将JSON文件(也可用作CSV)插入mySQL数据库。基本原理很清楚,但周围的要求使其难以实现:

  • JSON/CSV文件很大(约200 MB,最多200.000行)
  • 该文件包含多个字段。这些字段需要映射到mySQL数据库中具有不同名称的字段
  • CSV包含一个名为艺术编号的字段。此字段也存在于mySQL数据库中。艺术号是唯一的,但不是mySQL中的主键。如果CSV和数据库具有相同的艺术编号,我想更新mySQL记录。如果没有,则应创建新记录
  • CSV文件的几个字段在存储之前需要进行处理。还需要添加其他字段
  • CSV包含一个图像\u URL。如果是数据库中的新记录(未知艺术编号),则应复制、修改(使用imagick)此图像并将其存储在服务器上
  • 整个工作需要每天运行
  • 正如您所看到的,有很多限制(内存、运行时等)。但我不知道如何从架构的角度来处理这个问题。例如,我是否应该首先尝试将所有内容插入一个单独的“导入”数据库表,然后分别运行这些步骤?从映射到CSV行的数据库中获取ID的好方法是什么?如果我能够根据art_编号映射ID,Cakephp可以创建新记录或更新现有记录。此外,更改和复制多达20万张图像似乎也是一个大问题。那么如何将其分解成更小的块呢

    如果你能帮我找到正确的策略,我将不胜感激。在记忆和速度方面,我需要考虑什么?将流程分成不同的工作有意义吗?oyu会怎么做

    如果你能帮我找到正确的策略,我将不胜感激。在记忆和速度方面,我需要考虑什么?

    • 进口
    • 以避免内存问题,然后处理这些数据块。这是一个简单的循环
    • 如果处理需要很长时间,请考虑使用类似的作业队列。如果需要,您可以向用户更新进度状态
    将流程分成不同的工作有意义吗?oyu会怎么做


    这取决于需求、处理所需的时间以及系统可以并行处理的时间,而不必提高100%的CPU使用率并有效降低站点速度。如果发生这种情况,请将处理移到另一台机器上,或使用限制该进程的CPU使用。

    您的情况与任何csv导入进程有何不同?您可以使用读取文件,并一次处理一行数据。原则上,无论文件是作为1行还是100万行,导入逻辑都是相同的。先用一行,然后用a。谢谢你的澄清。我是否正确地假设PHP CLI脚本在运行时等方面没有限制?感谢您提供的链接和建议。因此,使用不受时间限制的CLI和逐行方法是可行的。我无法访问服务器(共享托管环境)上的Cake Shell。我仍然希望脚本位于蛋糕壳中,以便能够访问应用程序的其余部分。但我假设没有理由不从本地计算机运行脚本并更新远程数据库。使用某种FTP连接复制图像应该没什么大不了的(或者我希望如此)。你可以按照你的建议做,但这是一个非常糟糕的解决方案。换一个合适的主机。有些提供商,如Digital Ocean和VPS便宜,提供真正便宜的虚拟根服务器。如果人们想运行一个严肃的项目,但为了一个合适的环境而花费更多的钱却很便宜,那么他们不会在一天结束时支付更少的费用,因为其他事情将依赖于大量的变通方法。所以我建议你的客户更换主机提供商。好建议。目前,与从托管提供商已经完成许多工作的环境迁移相关的工作似乎是一大步。但你说得对,呆得久一点不会变得容易。。。