HotLine и другие модули выгрузки XML

Правила раздела: faq.php?mode=okay
Модератор: Модераторы

korshunov
korshunov
Репутация: 86
Сообщения: 1159
Зарегистрирован: 03.12.2015
С нами: 4 года 4 месяца
Skype

Сообщение #1 korshunov » 26.02.2020, 06:49

В версии 3.5.0 появился новый модуль выгрузки OkayCMS/HotLine.

По своему строению очень близок к модулям OkayCMS/YandexXML, OkayCMS/YandexXMLVendorModel, OkayCMS/Rozetka.
Выглядит все это, по-моему, весьма некрасиво по причине почти полного дублирования кода, в основном заменой в названиях переменных вхождений 'yandex' на 'hotLine'. Видимо, надо бы более тонко создавать подобный функционал одним модулем с настройками, и уж во всяком случае без такого ужасного дублирования.

Конечно, некоторые отличия есть, но они лишь вызывают дополнительные вопросы. Например, в модуле HotLine есть настройка Не выгружать товары с ценой 0, а в модуле Rozetka такого нет. Почему так хитро? Похоже, что это типовой недостаток того самого дублирования кода...

Опять таки хорошо бы было иметь документацию к этим модулям с упором на отличия между ними. Как по мне, они минимальны...

И очень неприятный общий недостаток модулей выгрузки - способ задания выборочной выгрузки для большого количества товаров - это просто издевательство над админом. Или эгоизм разработчика, которому так, как сейчас, легче.
Только для одной выгрузки yandex.xml в админке в списке товаров можно быстро отмечать товары для выгрузки. А для прочих такого счастья почему-то нет.

Еще один момент. Каждая отдельная выгрузка формируют данные в одинаковом стиле по всем товарам. А реально многим было бы удобно формировать для каждого отдельного товара свой тип - упрощенный или расширенный. Яндекс не зря такое позволяет. Думаю, разработчикам стоит подумать над такой возможностью...

OkayCMS M
Администратор
Аватара
OkayCMS M
Администратор
Репутация: 169
Сообщения: 1203
Зарегистрирован: 12.11.2015
С нами: 4 года 4 месяца
Сайт Skype

Сообщение #2 OkayCMS » 26.02.2020, 08:01

Создавать один модуль для всего как раз таки и не нужно, так как у клиентов наоборот другие запросы. Они хотят выгружать одни товары в хотлайн, другие в Яндекс, а третьи на Розетку.

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

Упрощенный или расширенный тип нужен только для Яндекса, остальным сервисам выгрузка нужна в одном формате.

По остальным замечаниям - учтем.

korshunov
korshunov
Репутация: 86
Сообщения: 1159
Зарегистрирован: 03.12.2015
С нами: 4 года 4 месяца
Skype

Сообщение #3 korshunov » 26.02.2020, 09:18

OkayCMS писал(а):Создавать один модуль для всего как раз таки и не нужно, так как у клиентов наоборот другие запросы. Они хотят выгружать одни товары в хотлайн, другие в Яндекс, а третьи на Розетку.

У клиентов вряд ли будут запросы на то, сколько модулей. Если один модуль им будет выгружать и в Hotline, и в Rozetka, они возражать не будут. Речь именно о специалистах, которые сейчас нерациональным образом дублируют большие количества кода...

OkayCMS писал(а):По документации к модулям - не совсем понял даже, что именно вы хотите там увидеть?

Ранее сказано:

korshunov писал(а):В версии 3.5.0 появился новый модуль выгрузки OkayCMS/HotLine.
документацию ... с упором на отличия между ними.

OkayCMS M
Администратор
Аватара
OkayCMS M
Администратор
Репутация: 169
Сообщения: 1203
Зарегистрирован: 12.11.2015
С нами: 4 года 4 месяца
Сайт Skype

Сообщение #4 OkayCMS » 26.02.2020, 10:20

korshunov писал(а):
OkayCMS писал(а):Создавать один модуль для всего как раз таки и не нужно, так как у клиентов наоборот другие запросы. Они хотят выгружать одни товары в хотлайн, другие в Яндекс, а третьи на Розетку.

У клиентов вряд ли будут запросы на то, сколько модулей. Если один модуль им будет выгружать и в Hotline, и в Rozetka, они возражать не будут. Речь именно о специалистах, которые сейчас нерациональным образом дублируют большие количества кода...

OkayCMS писал(а):По документации к модулям - не совсем понял даже, что именно вы хотите там увидеть?

Ранее сказано:

korshunov писал(а):В версии 3.5.0 появился новый модуль выгрузки OkayCMS/HotLine.
документацию ... с упором на отличия между ними.


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


По документации - вы повторили свои слова, а не обьяснили что хотите. Какую документацию вы хотите? Модуль Хотлайн создан для того чтобы выгружать товары в том формате, в котором требует хотлайн, а модуль Розетка в том формате в котором требует розетка и в этом между ними разница?

korshunov
korshunov
Репутация: 86
Сообщения: 1159
Зарегистрирован: 03.12.2015
С нами: 4 года 4 месяца
Skype

Сообщение #5 korshunov » 26.02.2020, 13:05

OkayCMS писал(а):Модуль Хотлайн создан для того чтобы выгружать товары в том формате, в котором требует хотлайн, а модуль Розетка в том формате в котором требует розетка и в этом между ними разница?

Ожидалось от Вас минимальное описание того, как работает модуль Хотлайн.
В частности, вместо малозначащих слов "в том формате, в котором требует хотлайн" ожидалось более серьезное "в том формате, в котором требует хотлайн, описание формата по ссылке такой-то".

Вот сейчас смотрю на демосайте выгрузку https://demookay.com/hotline.xml , там в файле можно видеть
<categories>
<category id="1">Мебель для дома</category>
<category id="32" parentId="1">Cтолы и стулья</category>
<category id="2" parentId="32">Кресло мешок</category>

А это не соответствует требованиям к тегу category, которые можно видеть на странице https://hotline.ua/about/pricelists_specs/#tr1

dmriabkov M
dmriabkov M
Репутация: 0
Сообщения: 8
Зарегистрирован: 25.02.2020
С нами: 1 месяц 7 дней
Сайт

Сообщение #6 dmriabkov » 26.02.2020, 22:04

Для магазина одежды выгрузка hotline не совсем подходит.
<param name="Размер" необходимо брать из варианта товара.

И также указывать по какой таблице размер:
<param name="Размер" unit="UA">50</param>

korshunov
korshunov
Репутация: 86
Сообщения: 1159
Зарегистрирован: 03.12.2015
С нами: 4 года 4 месяца
Skype

Сообщение #7 korshunov » 29.03.2020, 08:50

Провожу некоторые эксперименты по реальных объемам требуемой пямяти, которые требуются модулю:

227 товаров, описание 10000 байт, memory peak usage: 20 599 720
227 товаров, описание 20000 байт, memory peak usage: 26 186 664
227 товаров, описание 30000 байт, memory peak usage: 34 513 832
227 товаров, описание 40000 байт, memory peak usage: 40 092 584
227 товаров, описание 50000 байт, memory peak usage: 48 460 200
227 товаров, описание 60000 байт, memory peak usage: 54 039 464
227 товаров, описание 70000 байт, memory peak usage: 61 526 952

Вторая серия:
0 товаров, описание 10000 байт, memory peak usage: 10 566 152
1 товар, описание 10000 байт, memory peak usage: 10 566 088
227 товаров, описание 10000 байт, memory peak usage: 20 599 720
300 товаров, описание 10000 байт, memory peak usage: 23 846 936
325 товаров, описание 10000 байт, memory peak usage: 24 940 112
350 товаров, описание 10000 байт, memory peak usage: 26 037 320
375 товаров, описание 10000 байт, memory peak usage: 27 150 912
400 товаров, описание 10000 байт, memory peak usage: 28 252 248

Выходит примерно 40К памяти на каждый товар.
Если в выгрузке 10000 товаров, то надо 400M памяти - уже тяжко будет хостингу такое тянуть, если вообще потянет.
А если по полной программе (в требованиях Hotlint разрешается до 150 тыс товаров на один файл), то памяти надо уже 6G - это уж ни в какие ворота....

Для сравнения выгрузка yandex.php в Simpla в перечисленных аналогичных случях требует memory peak usage в пределах 2M...

Вышеприведенные цифры относятся к случаю, если в настройках модуля задать краткое описание.
Если же в настройках задать полное описание, то цифры существенно выше.

По ходу обнаружилась еще такая ошибочка - если в настройках задать краткое описание, то запрос к базе все равно вытягивает бесполезные большие объемы полного описания...

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

Интересно, работает ли это реально у кого-то при большом числе товаров?

OkayCMS M
Администратор
Аватара
OkayCMS M
Администратор
Репутация: 169
Сообщения: 1203
Зарегистрирован: 12.11.2015
С нами: 4 года 4 месяца
Сайт Skype

Сообщение #8 OkayCMS » 30.03.2020, 04:09

korshunov писал(а):Провожу некоторые эксперименты по реальных объемам требуемой пямяти, которые требуются модулю:

227 товаров, описание 10000 байт, memory peak usage: 20 599 720
227 товаров, описание 20000 байт, memory peak usage: 26 186 664
227 товаров, описание 30000 байт, memory peak usage: 34 513 832
227 товаров, описание 40000 байт, memory peak usage: 40 092 584
227 товаров, описание 50000 байт, memory peak usage: 48 460 200
227 товаров, описание 60000 байт, memory peak usage: 54 039 464
227 товаров, описание 70000 байт, memory peak usage: 61 526 952

Вторая серия:
0 товаров, описание 10000 байт, memory peak usage: 10 566 152
1 товар, описание 10000 байт, memory peak usage: 10 566 088
227 товаров, описание 10000 байт, memory peak usage: 20 599 720
300 товаров, описание 10000 байт, memory peak usage: 23 846 936
325 товаров, описание 10000 байт, memory peak usage: 24 940 112
350 товаров, описание 10000 байт, memory peak usage: 26 037 320
375 товаров, описание 10000 байт, memory peak usage: 27 150 912
400 товаров, описание 10000 байт, memory peak usage: 28 252 248

Выходит примерно 40К памяти на каждый товар.
Если в выгрузке 10000 товаров, то надо 400M памяти - уже тяжко будет хостингу такое тянуть, если вообще потянет.
А если по полной программе (в требованиях Hotlint разрешается до 150 тыс товаров на один файл), то памяти надо уже 6G - это уж ни в какие ворота....

Для сравнения выгрузка yandex.php в Simpla в перечисленных аналогичных случях требует memory peak usage в пределах 2M...

Вышеприведенные цифры относятся к случаю, если в настройках модуля задать краткое описание.
Если же в настройках задать полное описание, то цифры существенно выше.

По ходу обнаружилась еще такая ошибочка - если в настройках задать краткое описание, то запрос к базе все равно вытягивает бесполезные большие объемы полного описания...

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

Интересно, работает ли это реально у кого-то при большом числе товаров?

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

korshunov
korshunov
Репутация: 86
Сообщения: 1159
Зарегистрирован: 03.12.2015
С нами: 4 года 4 месяца
Skype

Сообщение #9 korshunov » 30.03.2020, 07:34

OkayCMS писал(а):Сравнивать с файлом симплы, как мне кажется не совсем корректно, ведь в нем не передаются доп. фото товара, характиристики товара и прочие моменты, которые можно настроить индивидуально для выгрузки.

Эх-мм, ожидался от Вас более серьезный ответ по существу, а не легковесная реакция на самое малозначительное замечание.

Но раз уж Вы концентрируетесь на обсуждении мелких вопросов, попробуем по-Вашему. Вот я в файле
Okay/Modules/OkayCMS/Hotline/Controllers/HotlineController.php попробовал закомментировать строки

Код: Выделить всё

            $products = $productsHelper->attachImages($products);
            $products = $this->sliceImagesByProduct($products, 10);

            $products = $productsHelper->attachFeatures($products);

            $countryOfOrigin = $this->settings->get('okaycms__hotline__country_of_origin');
            if (!empty($countryOfOrigin)) {
                $products = $this->attachCountryOfOriginParameter($products);
            }

            $products = $this->attachGuaranteeParameter($products);

чтобы убрать фото и характеристики. Цифры потребления памяти практически не изменились - мегабайты те же...
Такое сравнение с Simpla, надеюсь, для Вас более корректно?

zyxer M
zyxer M
Возраст: 28
Репутация: 48
Сообщения: 235
Зарегистрирован: 03.02.2016
С нами: 4 года 2 месяца
Откуда: Днепр

Сообщение #10 zyxer » 30.03.2020, 08:59

korshunov писал(а):Такое сравнение с Simpla, надеюсь, для Вас более корректно?
Нет конечно. В симпле другой подход для вывода товаров, это когда из кортежа результатов php всегда считывает только один результат (что кстати говорит о не совсем корректном замере расходов памяти). Такой подход возможен только если для товаров не нужно доставать дополнительные данные (изображения, свойства etc). Если же хотите сравнить с симплой (убрав свойства, изображения...), тогда сделайте этот кусок как в симпле. А вы подошли к вопросу очень легковесно замерив какие-то параметры для абсолютно разных скриптов, и ваши замеры в данном случае очень ошибочны.
P.S. Мне как-то сказали: "если кто-то считает что может написать web-апликуху, которая может на 10-15МБ памяти работать, быстрее пишите резюмеху в гугл))" Это я к тому, что ваши замеры (когда вы в данном случае сравниваете эти две выгрузки) не совсем корректны.

Добавлено спустя 2 минуты 8 секунд:
korshunov писал(а):Эх-мм, ожидался от Вас более серьезный ответ по существу, а не легковесная реакция на самое малозначительное замечание.
Но и тем не менее, некоторые ваши замечания по посту выше учтены, и уже внесены соответствующие фиксы, в будущей версии выйдут.

Добавлено спустя 29 минут 42 секунды:
Еще, если вас не затруднит, провести такой же анализ на примере модуля YandexXML, было бы интересно увидеть ваши результаты )
Всё сказанное мной, является лично моим мнением, и не является официальной позицией OkayCMS

korshunov
korshunov
Репутация: 86
Сообщения: 1159
Зарегистрирован: 03.12.2015
С нами: 4 года 4 месяца
Skype

Сообщение #11 korshunov » 30.03.2020, 12:16

Ничего не понятно.

zyxer писал(а):В симпле другой подход для вывода товаров, это когда из кортежа результатов php всегда считывает только один результат (что кстати говорит о не совсем корректном замере расходов памяти).

Замер делается в конце работы стандартной memory_get_peak_usage, и что тут некорректного, непонятно...


zyxer писал(а):Такой подход возможен только если для товаров не нужно доставать дополнительные данные (изображения, свойства etc).

Такой подход возможен не только в этом случае. Если Вы попробуете раскрыть свой тезис, можно будет говорить по делу. И в той же Simpla дополнительные данные доставать нужно и они добываются...




zyxer писал(а):Если же хотите сравнить с симплой (убрав свойства, изображения...), тогда сделайте этот кусок как в симпле. А вы подошли к вопросу очень легковесно замерив какие-то параметры для абсолютно разных скриптов, и ваши замеры в данном случае очень ошибочны.

Если Вам так все не нравится, можно, покажете правильные замеры?


zyxer писал(а):P.S. Мне как-то сказали: "если кто-то считает что может написать web-апликуху, которая может на 10-15МБ памяти работать, быстрее пишите резюмеху в гугл))" Это я к тому, что ваши замеры (когда вы в данном случае сравниваете эти две выгрузки) не совсем корректны.

Совсем несерьезный прием дискуссии - "кто-то как-то сказал", да еще и на жаргоне, приближающемся к блатному.


zyxer писал(а):Еще, если вас не затруднит, провести такой же анализ на примере модуля YandexXML, было бы интересно увидеть ваши результаты )

А Вы попробуйте сами провести. Я уже кое-что сделал, Вам все некорректно. Покажите образец.


И опять-таки заметьте, Вы все время пытаетесь сворачивать не мелкие детали. А суть моего поста не замечаете.

На всякий случай эту суть приведу, если Вы ее в упор не видите. В Simpla объем памяти почти не зависит от объема выводимых данных, а у Вас он растет в арифметической прогрессии при росте объема данных, что говорит о серьезных просчетах разработчиков и нерациональности организации скрипта...

zyxer M
zyxer M
Возраст: 28
Репутация: 48
Сообщения: 235
Зарегистрирован: 03.02.2016
С нами: 4 года 2 месяца
Откуда: Днепр

Сообщение #12 zyxer » Сегодня, 09:59

Проанализировав всё вышесказанное, перепробовав много различных вариантов работы модуля, получилась принципиально другая версия модуля.
В ней на данный момент не реализовано корректный вывод урла товара, всё остальное работает.
Из нюансов, этот модуль не будет работать на MySQL ниже 5.6 (используется GROUP_CONCAT), но думаю это только к лучшему ) и там, где печатаются товары, нельзя делать никаких sql запросов, т.к. там используются небуферизированные запросы, и любой запров в БД в это время сломает вывод.

По своим замерам памяти, вижу такие результаты, при выводе чуть более 100К товаров (но товары я не выводил, а печатал в файл, иначе браузер на машине создаёт большую нагрузку и точность измерения вообще никакая).
download (4).png
download (4).png (9.44 КБ) 40 просмотров


Для теста, нужно на 3.5.1 обновить файл Okay/Core/Settings.php
Settings.zip
(2.27 КБ) 0 скачиваний

И собственно сам модуль (возможны еще какие-то правки, но общая концепция будет такой).
Hotline.zip
(59.61 КБ) 1 скачивание


Считаю что здесь исправлены все замечания, касающиеся производительности модуля
Хотелось бы услышать мнение по этой версии модуля. Может будут еще какие дельные замечания, мы бы сразу их исправили.

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

korshunov
korshunov
Репутация: 86
Сообщения: 1159
Зарегистрирован: 03.12.2015
С нами: 4 года 4 месяца
Skype

Сообщение #13 korshunov » Сегодня, 14:04

zyxer писал(а):Проанализировав всё вышесказанное, перепробовав много различных вариантов работы модуля, получилась принципиально другая версия модуля.

Весьма рад, что мои старания привели к осознанию недостатков и необходимости улучшений.

zyxer писал(а):По своим замерам памяти, вижу такие результаты, при выводе чуть более 100К товаров (но товары я не выводил, а печатал в файл, иначе браузер на машине создаёт большую нагрузку и точность измерения вообще никакая).
download (4).png

Хорошо было бы, если б Вы показали свои методы тестирования, хотя бы по минимуму. Ибо тестирование часто есть процесс весьма тонкий и его можно делать очень по-разному и соответственно получать разные результаты...

В частности, сейчас выглядит по меньшей мере странно, что у Вас 100К товаров дают в результате файл 11M. Это значит, что в результирующем файле на запись одного товара приходится в среднем лишь 110 байт. Даже одни XML-теги с пустыми значениями заняли бы намного больше...

Опять же, обычно при тестировании стоит вопрос о работе СЕРВЕРА, ибо разработчикам сайтов тестировать пользовательские компьютеры и браузеры из-за их разнообразия никакого смысла нет. И почему у Вас это смешивается в одну кучу и почему у Вас проблемы с точностью, можно только гадать...

zyxer писал(а):...там, где печатаются товары, нельзя делать никаких sql запросов, т.к. там используются небуферизированные запросы, и любой запров в БД в это время сломает вывод.

Вопрос не принципиальный, но при некоторой смекалке это все можно. Когда-то довольно давно приходилось делать в экзотической ситуации для Simpla параллельную обработку двух небуфферизованных запросов. В Okay не пробовал, но скорее всего пойдет тоже...

zyxer M
zyxer M
Возраст: 28
Репутация: 48
Сообщения: 235
Зарегистрирован: 03.02.2016
С нами: 4 года 2 месяца
Откуда: Днепр

Сообщение #14 zyxer » Сегодня, 14:12

korshunov писал(а):Хорошо было бы, если б Вы показали свои методы тестирования, хотя бы по минимуму. Ибо тестирование часто есть процесс весьма тонкий и его можно делать очень по-разному и соответственно получать разные результаты...
Запустил выгрузку, но там где вывод, я его убирал и делал запись в файл http://prntscr.com/rsc9ir. Итоговый файл получился около 400+ МБ.

korshunov писал(а):В частности, сейчас выглядит по меньшей мере странно, что у Вас 100К товаров дают в результате файл 11M. Это значит, что в результирующем файле на запись одного товара приходится в среднем лишь 110 байт. Даже одни XML-теги с пустыми значениями заняли бы намного больше...
11 МБ это объем ОЗУ (по идее это то же что и memory_get_peak_usage(), но не уверен что прям одно и тоже). И эти БМ некорректно делить на кол-во товаров, т.к. в памяти в данном случае мы храним один товар.

Добавлено спустя 4 минуты 12 секунд:
korshunov писал(а):Опять же, обычно при тестировании стоит вопрос о работе СЕРВЕРА, ибо разработчикам сайтов тестировать пользовательские компьютеры и браузеры из-за их разнообразия никакого смысла нет. И почему у Вас это смешивается в одну кучу и почему у Вас проблемы с точностью, можно только гадать...
разрабатываю на локальной машине, поэтому если ловить xml в браузер (которая 400+ МБ) браузер начинает создавать на этой же машине нагрузку и точность изменений начинает "плавать"

Еще и браузер такой файл просто отказывается отображать (по крайней мере хром)

Добавлено спустя 5 минут 10 секунд:
korshunov писал(а):Вопрос не принципиальный, но при некоторой смекалке это все можно. Когда-то довольно давно приходилось делать в экзотической ситуации для Simpla параллельную обработку двух небуфферизованных запросов. В Okay не пробовал, но скорее всего пойдет тоже...
просто интересно, это было на одном коннекте к БД?
Всё сказанное мной, является лично моим мнением, и не является официальной позицией OkayCMS

korshunov
korshunov
Репутация: 86
Сообщения: 1159
Зарегистрирован: 03.12.2015
С нами: 4 года 4 месяца
Skype

Сообщение #15 korshunov » Сегодня, 15:20

zyxer писал(а):просто интересно, это было на одном коннекте к БД?

На разных.
При желании и на одном можно сделать. Но переделывать класс работы с базой - морока некоторая.

zyxer писал(а):разрабатываю на локальной машине, поэтому если ловить xml в браузер (которая 400+ МБ) браузер начинает создавать на этой же машине нагрузку и точность изменений начинает "плавать"

Так не открывайте большой файл, поставьте только ссылку на скачивание (если кому надо).
Файлы таких объемов просто так редко пользователи открывают...

zyxer писал(а):11 МБ это объем ОЗУ (по идее это то же что и memory_get_peak_usage(), но не уверен что прям одно и тоже).

Если так, то для Okay это большое достижение. Даже не верится, что так хорошо...


Название раздела: Вопросы по работе с OkayCMS
Правила раздела: faq.php?mode=okay

Быстрый ответ


Введите код в точности так, как вы его видите. Регистр символов не имеет значения.
Код подтверждения

   

Вернуться в «Вопросы по работе с OkayCMS»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 1 гость