2010-01-30 51 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()保存它。它會更高性能,並且會使讀者無法獲得一半的文件。 –