导入巨大的JSON编码数组,而不会遇到内存限制
||
我有一个包含两个JSON数组的文件;一个保存具有4个值的列名,另一个包含10,000+个记录值的数组。
我正在使用Symfony和Propel;在使用json_decode时,它抛出了允许的内存大小。在我的php.ini中,我将最大大小指定为500 MB,但是文件执行了10秒钟并引发了错误。
数据文件包含
{
\"columns_map\":[\"Name\",\"Age\",\"Address\",\"State\"],
\"rows_map\":{\"1\":[\"value1\",\"value2\",\"value3\",\"value4\"],
\"4\":[\"value1\",\"value2\",\"value3\",\"value4\"]
\"6\":[\"value1\",\"value2\",\"value3\",\"value4\"].......upto 10,000 and more records
}
}
在我的Symfony页面中,我有此代码
$file = \"path to the file\";
$content = file_get_contents($file);
$array = json_decode($content);
我想将文件数组值存储到PHP数组和进程中,并且无论php.ini中设置了多少内存限制,我都希望读取它。
我想一次存储所有值或吐出文件并存储(例如读取前1000条记录并循环到末尾,但是如何读取rows_map数组中的前1000条记录?)。
没有找到相关结果
已邀请:
3 个回复
乏摩纶誊伟
,可以确保允许的内存值正在更新。而且,如果您运行的是Apache或某些CGI服务器,请不要忘记重新启动Web服务器。 即使10k的项目也不会耗尽500MB的内存;如果确实如此,您可能会尝试自己解析它时遇到相同的问题。读取和解析原始JSON字符串的块是不切实际的。选择一种更合适的格式,将数据插入数据库,或将数据分块写入单独的文件,然后分别解析每个文件。
黎喊病
(前1000行+柱形图)
(第二千行+列图) 另一个问题可能是推进。我已经观察到了Doctrine的类似问题,这迫使我不得不使用普通的PDO插入对象。教义会阻塞所有内存和cpu,而使用PDO编写的语句很容易处理此类事务。 另一种选择是使用CSV(我知道这是1980年代)。但是它应该允许您每行阅读它。
诞胃