| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: X технологии > записать мого узлов |
| Автор: armor85 9.5.2008, 13:54 |
| Здравствуйте, при попытке записать более 2000 узлов (в каждом ещё по пять узлов), возникает ошибка: Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 50 bytes) in может можно это както обойти? |
| Автор: Feldmarschall 9.5.2008, 13:58 |
| Для начала надо научиться быть немного информативнее в своих вопросах |
| Автор: skyboy 9.5.2008, 14:07 |
| armor85, ограничения, наклывадемые на объем памяти, выделяемой РНР - 64 Мб. Ты их превысил в результате построения своей структуры(кстати, да, вопрос задан довольно туманно 1. Если можешь сменить генератор(или парсер - что ты там испольщуешь?), на такой, который не выгружает полностью дерево в память, а постоянно работает с файлом(вроде файла подкачки: взял необходимое, остальное - записал обратно в файл), то ты потеряешь в скорости, но обойдешь ограничение. 2. Если можешь сменить структуру данных, чтоб у тебя не требовалось 2000х5 узлов - ты обойдешь ограничение. 3. Если ты можешь сменить логику(алгоритм), чтоб не требовалось одновременно обрабатівать 2000х5 узлов, ты обойдешь ограничение. А вопросы типа "у меня самолет не летает. что делать?" вызывают легкое раздражение - неужели тяжело было написать на два абзаца больше, но чтоб не вытягивать подробности по кусочкам? |
| Автор: armor85 9.5.2008, 14:17 |
| Ошибку понял. Записываю данные из базы данных MySQL, своего рода кэш, но для своих целей. Т.ё. 2000 товаров (например) с 5 параметрами, записываю из базы в xml в виде дерева. Это действие выполняется один раз в час по cron. Каждый раз идёт обход всех товаров и всех их свойств, файл переписывается полностью. Сейчас использую domit, т.к. он легче в использовании. Но php dom была таже история. SimpleXML нету. Да и еще проблема, товаров может быть и 10000, а оно уже сейчас выделываться начинает. |
| Автор: armor85 11.5.2008, 16:06 | ||||
| Собственно вопрос решил, посадил всё на SimpleXML. 4000x5 полёт нормальный. Но проблема:
Помогите переписать под SimpleXML.
$t->title почему-то пустой, хотя должно быть число. |
| Автор: Fortop 11.5.2008, 17:31 | ||
armor85, ты уверен, что тебе нужен кеш, на xml? |
| Автор: armor85 12.5.2008, 08:21 | ||
Fortop, уверен.
Помогите переделать под SimpleXML. И что я выше писал тоже. |
| Автор: Feldmarschall 12.5.2008, 08:51 |
| Что-то мне тоже сомнительна польза такого кэша |
| Автор: armor85 12.5.2008, 09:07 |
| Feldmarschall, сразу скажу что это не КЭШ, это что-то типа кэша (самому смешно). Эти файлы вроде снимка цен, по которым потом строится ценовые индексы. Компонент который их строит работает с xml. Убиваю сразу двух зайцев, 1. информация на определенное число, когда делался снимок, т.к. все в разных файлах 2. что что компонент просит (т.е. xml), то я ему и даю. Вопрос актуален. ^^^ |
| Автор: Fortop 12.5.2008, 12:41 |
| armor85, Эти снимки дешевле, проще и удобнее хранить в БД. И манипулировать с ними быстрее в БД, а не в XML. Добавлено через 2 минуты и 14 секунд Сделать же экспорт в XML - с полпинка. |
| Автор: armor85 12.5.2008, 13:37 |
| Fortop, я с битриксом работаю, и поэтому на прямую в базе данных ничего хранить не могу, а через его api слишком долго получается. И вообще оставим тему целесообразности использования xml. Помогите лучше под simple всё переписать. Кто поможет, + в репу. |
| Автор: IZ@TOP 22.5.2008, 12:01 |
| armor85, тебе не SimpleXML нужен, тебе нужен XMLWriter (т.е. SAX) http://ru2.php.net/XMLWriter. Для чтения можно использовать XMLReader. Это что касается объемов от 2Мб. SimpleXML и DOM работают нормально на объемах до 2Мб (ну и еще от сервера/количества памяти выделяемой для PHP зависит, но я бы не рекомендовал увеличивать ее объем). |
| Автор: armor85 28.5.2008, 12:22 |
| IZ@TOP, Спасибо за совет. |