генерация больших XML

133
21 февраля 2019, 11:30

Генерирую xml для различных сервисов . В базе данные добавляются с каждым днем и на данный момент сам скрипт тратит на генерацию 40 - 50 тыс записей более 1.3 гб памяти.

Основную часть памяти забирает выборка из базы всех записей (в выборке только нужные колонки указаны).

Подскажите, как выходить в данном случае ? полагаю, что нужно выборку из базы как-то грамотнее сделать , возможно как-то ее разделять или лимитировать ?

Скрипт на данный момент генерируется раз в час-два

Answer 1

Данные из БД следует выбирать в цикле чанками, например по 100 записей раз за разом. Оптимальное количество записей в чанке зависит от сложности запроса, самих данных и железа. Избегайте offset для выборки, он ресурсоёмок.

В этом же цикле поточно записывать файл, в данном случае стандартный XMLWriter отлично подойдёт.

Если файлов много, а исходят они из одних данных, то можно открыть сразу несколько файлов и фильтровать/модифицировать выгрузку под нужды разных сервисов в один проход.

READ ALSO
Подключение стилей в модуле Yii2

Подключение стилей в модуле Yii2

Создал модуль и для него отдельный AppAsset, подключил стили и скрипты, но стили и скрипты не загружаются хотя если посмотреть исходный код страницы...

147
Как в woocommerce вывести товары по произвольному полю

Как в woocommerce вывести товары по произвольному полю

Столкнулась с проблемой: есть товары с одинаковым значением произвольного поляНужно вывести на странице товара, товары с таким же произвольным...

172