0 Пользователей и 1 Гость просматривают эту тему.
  • 3 Ответов
  • 2224 Просмотров
*

xxxTiTxxx

  • Осваиваюсь на форуме
  • 35
  • 6 / 0
DOMIT и превышение memory_limit
« : 20.03.2008, 10:42:12 »
Предыстория:
Есть задача наладить экспорт/импорт кусков базы между главным сайтом компании и сайтами партнеров. Так как количество таблиц из базы для импорта/экспорта будет постоянно меняться, да и к тому же среди переносимого содержимого таблиц будет текст с встречающимися ';' , ','  и прочими радостями csv, то csv как формат обмена был отметен сразу, решил использовать внутренние блага joomla,  а точнее XML и встроенный движок DOMIT.
По делу:
При загрузке/сохранении файлика XML через DOMIT, php начинает кушать >80M памяти ,как я понимаю, под переменные. Причем размер самого сохраненного файлика небольшой 1.3M, при этом если разобрать загруженную структуру в многомерный массив, то к занимаемой памяти прибавится  1-3М всего. Как усмирить аппетит объектов класса DOMIT_Document()? Если есть информация о том, как часто хостеры дают увеличить memory_limit через .htaccess, тоже было бы не плохо поделиться.
*

smart

  • Администратор
  • 6485
  • 1317 / 15
  • Хочешь сделать хорошо — сделай!
Re: DOMIT и превышение memory_limit
« Ответ #1 : 20.03.2008, 10:56:46 »
А почему бы не попробовать разбирать указанный XML не с помощью DOM-парсера, а посредством SAX? Он намного менее требователен к ресурсам, а в принципе не намного уступает по возможностям. Да и в библиотеке DOMIT он так же присутствует... Мне кажется это может решить вашу проблему (по крайней мере при чтении данных).

Что же касается увеличения памяти, то 80 метров вам вряд ли кто из хостеров даст выделить на отдельный процесс. Разве что на выделенном сервере...

В принципе можно еще попробовать уменьшить объемы файла, увеличив количество файлов, например выгружать все данные в несколько XML-файлов, паковать в архив, а потом последовательно (или по заданному порядку) их обрабатывать.
*

xxxTiTxxx

  • Осваиваюсь на форуме
  • 35
  • 6 / 0
Re: DOMIT и превышение memory_limit
« Ответ #2 : 20.03.2008, 13:15:17 »
SAX это
Код
DOMIT! relies on an underlying SAX parser to parse XML data. You have the choice of one of two SAX parsers:

    *

      Expat is a C-based SAX parser written by James Clark that comes bundled with most later distributions of PHP.
    *

      SAXY is a pure PHP SAX parser written by Engage Interactive that comes bundled with DOMIT!
Я правильно понял? Так он вроде по умолчанию включен. Попробовал поменять на Expat - никакой разницы. Кстати при сохранении файла php кушает аж 120M. Попробую подробить базу.
*

xxxTiTxxx

  • Осваиваюсь на форуме
  • 35
  • 6 / 0
Re: DOMIT и превышение memory_limit
« Ответ #3 : 20.03.2008, 15:35:22 »
Полностью разочарован в этом DOMIT :(. Файлик на выходе - 9.9Kb. Около 50 нодов по два текстовых нода внутри, итого 100 - занимает 8   метров оперативы. Фи. :'(
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Запросы к БД. Превышение лимитов

Автор Roberta

Ответов: 2
Просмотров: 2314
Последний ответ 18.03.2010, 09:02:56
от Roberta