b_xml_tree_import_1c ? что-нибудь про логику работы, код я и так вижу...
вопрос именно зачем эта таблица? почему не построчная обработка данных?
построчная - это как?
как обрабатываются справочники... построчно читается XML и вызываются обработчики...
элемент - да, в память, но элементы, не весь XML
(тяжело вздыхая) а там memory_limit и execution_time... 500-метровый xml...
эмм, как HL обмениваются - 1С делает запрос - БУС берет часть XML и обрабатывает, запоминает в сессию место в файле... и так в цикле. там нет упора в memory_limit и execution_time, они только ограничивают размер прочитанной части файла.
справочник по определению не может иметь огромное число значений и структура данных там плоская "вопрос в другом, для чего обмен через таблицу?" 99% случаев обмена происходят за N хитов, это раз. структура файла не плоская - один узел (товар) может ссылаться на другой (раздел, свойства и т.п.)
В справочнике тоже могут быть связи, но обмен не пишется во временную таблицу( Количество хитов же не ограничивается, как оно влияет на обмен через таблицу бд?
Я кастомизирую обмен(пишу свой) и пытаюсь понять почему разработчики бус выбрали такой метод... Правда не могу найти описание в гугле...
ну хорошо... как вы представляете себе построчную обработку с использованием обработчиков?
Использую класс CXMLFileStream Читаю построчно XML, добираюсь до тега X и передаю его в обработчик, читаю тег в память, обрабатываю и произвожу нужные действия..
Окей. Выгрузите через xml-экспорт инфоблоков например каталог демо-данных eshop и посмотрите его структуру. Например, блок разделов. Чтобы завершить обработку этого тега, вам нужно распарсить ВЕСЬ блок сразу (потому что нигде не обещано, что разделы будут выгружены в порядке возрастания глубины вложенности). Все это выгружаться будет в память, раз - т.е. получить fatal элементарно. при достаточно небольшом числе разделов за хит весь блок не обработать - т.е. либо упадет, либо повторный парсинг - замедление скорости. и так далее
Т.е. именно из-за связей по id нужно создавать таблицу, верно понял ?
из-за того, что это позволяет иметь расход памяти, слабо зависящий от объема данных. а для использования CXmlFileStream расход прямо пропорционален объему (и как бы не по экспоненте)
Обсуждают сегодня