你能帮我解决一下能够解析和组合12个xml文件的想法,每个文件有~5兆,最后有一个全局文件。
目前,我使用cron运行脚本(symfony框架命令)
对于每个文件,我使用bundle JMSSerializerBundle对其进行反序列化,它允许从xml文件创建一个对象。
我有记忆问题。我认为这是由于这种反序列化。
所以我的问题是,
你知道一个更好的方法来做这个stup,如果我用SimpleXML解析这个反序列化替换这个反序列化,你认为它消耗更少的内存吗?
另外,如果我将文件保存在变量Redis中它会改变什么吗?
而且,最后一个问题,如果我使用数据库,例如,我将文件保存在表中,然后我检索表中的所有记录,并用此构建全局xml文件,可以吗是个好主意? 或者分几步构建全局文件(每次3个文件),每次在表中保存,每次都以简单的数组检索数据。
非常感谢你的帮助。
答案 0 :(得分:0)
如果这是通过命令行完成的任务之一,您可以通过在开头使用memory_limit
将PHP的-1
设置为ini_set('memory_limit', -1);
来逃脱CLI脚本。
这显然不是请求的选项,因为单个请求可能会占用系统的所有内存。另请注意,您显然仍受可用系统内存的限制,因此您可能仍会遇到此问题。
正如评论中已经建议的那样,您可以通过使用像XMLReader这样的拉解析器来减少内存使用量。这将减少读取XML所消耗的内存量,但显然保持读取数据(可能在数组中)仍将累积。如果您没有使用最新的PHP版本,那么这可能是优化内存使用的最简单方法。
除此之外,我建议使用像xhprof或blackfire.io这样的工具来分析脚本的内存使用情况,并尝试修复它们指出的主要问题。