PHP супер быстрые обновления XML требуется - PullRequest
0 голосов
/ 31 января 2010

Я запускаю систему, которая должна обновлять различные XML-файлы из данных, хранящихся в БД. Сценарий запускается через php-файл на стороне сервера, который отслеживается демоном, поэтому он запускается, завершается с освобождением ресурсов и затем перезапускается.

У меня есть несколько тестов в скрипте, и когда мне нужно обновить 100 XML-файлов, на это уходит около 15 секунд. Типичный xml-файл, который создается, составляет около 6 КБ - я создаю xml, используя php dom, и пишу, используя dom-> save. БД полностью нормализована, и правильные индексы на месте, 3 запроса, которые мне нужно выполнить, которые получают необходимые данные для обновления XML, занимают всего около 0,05 секунды. Поэтому узкое место, похоже, связано с фактическим созданием xml через dom и написанием самого файла.

Есть ли у кого-нибудь идеи, как я мог бы действительно ускорить процесс? Я подумал об использовании проверки crc, чтобы увидеть, нужно ли переписывать xml, но это все равно потребует от меня чтения XML-файла, который я буду обновлять, и я не делаю этого в данный момент, так что, конечно, это так же плохо как просто сохранить новый файл поверх старого? Кроме того, я не думаю, что можно редактировать определенные части XML, поскольку структура не является однородной, порядок узлов может меняться в зависимости от того, какие данные не являются нулевыми после обновления.

Очень ценю ваши мысли об этом!

1 Ответ

2 голосов
/ 31 января 2010

Пятнадцать секунд, чтобы написать несколько файлов XML? Это звучит слишком много. Можете ли вы сделать еще немного профилирования и выяснить, какая именно функция является узким местом?

Рассматривали ли вы написание простого текста XML (fwrite("<item>value</item>")) вместо его построения DOM? Звучит оправданно в этом случае.

В противном случае для кэширования всегда есть filemtime(), который вы можете использовать, чтобы быстро получить время «последнего изменения» вашего XML-файла и посмотреть, является ли запись в БД моложе этой. В такой системе, как вы описали, не нужно сравнивать содержимое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...