Sergey
@tsymbalmitia ты очередями на джумле занимался?
Дмитрий
@tsymbalmitia ты очередями на джумле занимался?
сомтря как их строить и как надо
Sergey
Импорт больших прайсов
Sergey
На десятки тысяч товаров
Дмитрий
Импорт больших прайсов
какие объемы файлов и икак передаются
Sergey
какие объемы файлов и икак передаются
Пока хз, csv какой-нибудь, загрузка со страницы или по фтп, пока хз
Дмитрий
Пока хз, csv какой-нибудь, загрузка со страницы или по фтп, пока хз
тебе руками присылают? или какой протокол передачи
Дмитрий
из 1с, по ssh откуда, выкачка по http
Sergey
Битрикс 24
Sergey
Я пока думаю как по уму это сделать
Sergey
Чтоб не напороться на время выполнения скрипта
Sergey
Вообще по крон нужно будет обновление цен и остатков
Дмитрий
Битрикс 24
из битрикс 24 забирается в каком формате и протоколу?
Дмитрий
нет, сначала бы понять как передается
Дмитрий
протокол передачи
Дмитрий
первый этап получение, второе обработка
Vladimir
Там нет ограничения
Sergey
Так запускай cli
Я и планирую
Sergey
Но с большим объемом файлов не работал
Vladimir
Я и планирую
Для cli нет ограничения по времени
Vladimir
Но с большим объемом файлов не работал
Тут только надо следить за памятью
Vladimir
А то некоторые не влезают
Vladimir
В остальном все норм Cli не критичен относительно времени
Дмитрий
Но с большим объемом файлов не работал
сначала надо определиться с протоколом передачи и форматами, потом думать про обработку, да, запускать такое надо в кли: 1. нет ограничений по вреемени 2. написать надо чтобы память не текла совсем 3. надо писать алгоритмы импорта так, что если упадет, можно восстановить 4. если нужна скорость, запустить можно в несколько процессов обработку, предварительно разбив алгорит импорта, чтобы можно было паралеллльно обрабатывать
Дмитрий
5. есть нюансы импорт в сам движок куда нужно, это нужно подбирать решение точечно к движку
Sergey
Я пока применительно к жш
Дмитрий
Ну тут либо напрямую в базу, либо моделями
зависит от правильности источника
Sergey
Там объём не десятки тысяч товаров, но не хочу по 100 раз переделывать одно и то же
Дмитрий
по хорощему надо прогонять через всю логику пхп
Дмитрий
котоаря написана
Дмитрий
чтобы правильно все обработалось, всеми плагинами и тд
Дмитрий
через валиацлию проходила и тд
Sergey
чтобы правильно все обработалось, всеми плагинами и тд
Там просто остатки и одна цена (пока что)
Дмитрий
я и говорю что надо прогонять через бизнес логику программы
Дмитрий
чтоюы устранить все ошибки
Дмитрий
десятки тысяч это фигня
Дмитрий
но зависит от интервала импорта
Дмитрий
если это не постоянная синхронизация
Дмитрий
которая все обхемы сразу сгружает
Sergey
Раз в сутки, может 2 раза. Как конверсии на сайте пойдут.
Дмитрий
если мгновенная синхронизация, то она строится по сути на хуках
Дмитрий
на порциональных изменениях
Дмитрий
проблем не будем
Sergey
если мгновенная синхронизация, то она строится по сути на хуках
Я так хотел, но на стороне б24 нет хуков на приходные накладные. Поэтому крон.
Дмитрий
Раз в сутки, может 2 раза. Как конверсии на сайте пойдут.
алгоритм общий если не в один поток, а в несколько чтобы сократить время синхронизации 1. получил файлы откуда в каком-то формате 2. запускаешь предварительно логику какую-то, скрипт кли например, который разобьет на порции импорта 3. запускаешь импорт. то есть сразу несколько процессов одного кли скрипта, и передаешь им аргументы каждый откуда импортирует и докуда, все логируется, чтобы можно было прервать импорт и потом восстановить 4. в скрипте кли импорта гонишь через модели, если таблица базы innodb, то там блокирование идет на уровне записи, а не всей таблицы и можно параллельно спокойно гнать
Sergey
Спасибо, буду думать
Дмитрий
Спасибо, буду думать
можешь сделать следующее
Дмитрий
если JS использует дужмлвоский билдер запросов
Дмитрий
то в каждом потоке импорта можно сделать накопление запросов от моделей
Дмитрий
то есь создать одну большую транзацию, модели по сути сделают insert,update пачки
Дмитрий
и потом коммит
Дмитрий
если ошибка, то rollback
Дмитрий
тем самым обеспечишь безопасность от ошибок
Дмитрий
и авттоматически откат будет
Дмитрий
и помечаешь в конфигах где-то, что импорт сломан
Дмитрий
и все останалваиется
Дмитрий
@sergeytolkachyov если надо будет переключающися конфиги программно, то можно вот это использовать
Дмитрий
https://github.com/RadicalMart/lib_env
Дмитрий
чтобы не в плагине например там обращсять в его params поле
Дмитрий
а через это
Дмитрий
это по сути то что джумла свой configuration файл делает
Дмитрий
JLoader::registerNamespace('Env', <путь>); Env\Env::addScope('default', <путь до папки где будут храниться конфиги>); Env\Env::setScope('default'); Env\Env::set('import.flag', false); $flag = Env\Env::get('import.flag');
Дмитрий
файл будет <указанынй путь>/import.php и в нем класс (EnvImport) и flag будет свойство и устанвлено в false
Дмитрий
это полностью файлы, к бд ничего не идет, и можно находу конфиги менять соовстветсвено
Дмитрий
мы такое применяем к внешним ресурсам
Дмитрий
если сдохло, помечается что ресурс не доступен и применяется другая логика
Дмитрий
это я для того что можно импорт вот флаг работает не работает помечать так ну и друиге вещи
Дмитрий
хранение вренных токенов и тд
Дмитрий
например mail.ru при работе с почтой выдает токены на час и надо где-то сохрантяь
Дмитрий
@sergeytolkachyov тебе информации хватает?
Дмитрий
надо еще что-то?
Sergey
Пока нет, спасибо.
Igor
Пока нет, спасибо.
Тебе надо наоборот чтобы второй поток не запустился иначе собьется и выйдет что последний итем старого импорта запишется поверх нового
Алексей
Кто-нибудь работал с electron.js?
Igor
А вообще битра 24 это же онлайн сервис там должна быть возможность реалтайм по одному отправлять на сайт