2010-01-30 50 views
0

我运行一个系统需要更新存储在数据库中的数据的各种XML文件。该脚本通过服务器端php文件运行,该文件由守护程序监视,以便执行,完成释放资源,然后重新启动。需要PHP超快速xml更新

我在脚本中有一些基准测试,当我需要更新100个xml文件时,需要大约15秒才能完成。一个典型的xml文件是在6kb左右 - 我使用php的dom创建xml,并使用dom-> save进行编写。数据库是完全规范化的,并且正确的索引已到位,我需要执行的3个查询获得必要的数据,我需要更新xml只需要大约0.05秒。因此,瓶颈似乎是通过dom实际创建xml并写入文件本身。

有没有任何想法,我真的可以加快这个过程?我已经考虑过使用crc检查来查看xml是否需要重写,但是这仍然会要求我读取我将要更新的xml文件,并且此刻我不这样做,所以肯定它同样糟糕只是将一个新文件保存在旧文件的顶部?此外,我不认为它有可能编辑XML的某些部分,因为结构不是统一的,节点的顺序可能会更改,取决于更新后哪些数据不为空。

真的很感谢你对此的看法!

+0

你完全重建每个100个文件吗?你应该链接到几个示例文件,以便人们可以了解工作量。对于只有100个文件来说,15s似乎有点太过分了,但由于我们不知道它运行在哪种服务器上,所以很难说清楚。尝试使用XDebug + WinCacheGrind/KCachegrind分析代码。 –

+0

我同意。看起来这可能是一个简单的preg_replace可行的,但真的有nei。 – cwallenpoole

回答

2

十五秒钟来写几个XML文件?这听起来太过分了。你可以做更多的分析,找出哪个功能正是瓶颈吗?

您是否考虑编写纯文本XML(fwrite("<item>value</item>"))而不是通过DOM构建它?在这种情况下听起来是合理的。

否则,对于缓存,总是有filemtime(),您可以使用它来快速获取XML文件的“上次修改时间”,并查看数据库条目是否比这更新。在你描述的系统中,应该不需要比较内容。

+0

避免fwrite()调用。更好地在变量中构建XML,然后使用file_put_contents()保存它。它会更高性能,并且会使读者无法获得一半的文件。 –