Павел
Null
Да. Раньше тяжко было.
Щас сделано настолько высокоуровнево все, что об ssr голову включать вообще не надо.
Павел
Konstantin
возможно, я не пробовал какие-то корпоративные гриды или проекты на 1М строк, но в мелко-средних проектах близко того уровня декларативности и автоматизации как в симфони, я не видел
Павел
Мутный рендеринг. Хотя если упороться и познать дзен в кастомных теплейтах - наверное четко
Null
Konstantin
никто их не любит, но это лучше чем каждую форму описывать руками, как это происходит в жс-мире
Konstantin
Null
А попробуй.
Есть шанс, что обратно не вернешься =)
Павел
Не, vue хорош.
Null
Не, vue хорош.
Тонкую грань соблюдает между "едрить какой простой" и "смотри как умею".
Null
Павел
Но справдливости ради, строительство форм и валидации на фронте - мне не понравилось нативное
Павел
Даже симфонийские формы четче)
Null
Даже симфонийские формы четче)
Если прям упарываться в схемы - есть много решений на json.
Бек возвращает чертеж формы, со всеми правилами валидации. ФРонт просто рисует. По сути те же симфони формы.
Павел
На нативе вью3, ну прям очень больно показалось. Короче прям кайф не ловил, скорее обратно)) Но мб просто по аматорски строил.
Павел
Но это опять таки, потому что vue3 а на 2 были норм либы и бустрапы
Павел
и там вроде прям каеф
Null
и там вроде прям каеф
Не ну. формочки строить все равно руками приходится и на двойке с вуетифаями.
Если схема генератор не приколхоженый.
Павел
Null
Что есть то есть.
Павел
добрый день, не подскажите как лучше сделать импорт 3млн строк из csv в бд, пробовал решить в лоб но упираюсь в конфиги php и nginx, бесконечно расширять мне кажется не очень рациональным решением, в голову приходит идея запускать из консоли консольную команду, а на фронт отдать что файл успешно загружен
Nikolay
Павел
Юра
В лоб только через fascgi finish request
Юра
https://www.php.net/manual/ru/function.fastcgi-finish-request.php
Konstantin
Павел
Konstantin
я бы посоветовал (впрочем, там миллион вариантов, из которых, судя по всему, вы выбрали единственный неправильный - разгребать в один поток в пхп) таки заюзать какую-то очередь - хоть в базе, хоть в редисе. то есть разделить загрузку на две части - сначала мы кладем данные куда-то, откуда их можно конкурентно обрабатывать (файл не особо годится), потом уже запускаем пачку воркеров что по одной записи оттуда их достают, обогащают (я так понимаю поэтому нужен пхп - добавить данных к каждой строке), и пишут в целевую таблицу.
если нету готовых очередей в проекте что можно заюзать - заведите временную таблицу в базе
Павел
Это тестовое, я думаю поднять rabbitmq, в него ложить путь на файл, клнсюмером считать и переписать в базу
Konstantin
а, еще лучше, в тестовом можно и заморочиться
Konstantin
редис не хотите вместо кроля? проще, удобнее
Konstantin
но если хотите впечатлить собеседующего знанием баз данных - сделайте через постгрес и select for update, лично мне бы это понравилось - базы мало кто знает дальше круд-операций
Павел
А редисом как?
Павел
А него путь положить а как консольную команду запустить?
Павел
Konstantin
а редис из коробки - очередь. берем лист, и в простейшем случае (без ack-ов) это lpush + rpop
Konstantin
то есть делим наш процесс на две части (это в любом случае нужно). сначала пишем скрипт, что с помощью чего-то типа fgetcsv читает csv построчно и каждую строчку кладет в очередь (пока неважно какую)
Konstantin
fgetcsv - чтобы не грузить в память весь файл, а работать с ним построчно, просто двигая курсор
Konstantin
после того как у нас появилась копия csv в очереди, мы уже можем запустить пачку воркеров, что процессят эту очередь параллельно, с файлом так не выйдет
Павел
Хм надо обдумать вникнуть
Konstantin
типа первый шаг - это сделать из файла (к которому конкурентный доступ организовать сложно и неудобно) очередь, которую можно процессить в сколько угодно потоков независимо
Юра
Юра
Не прошел )
Юра
Все хотят слышать про о могучие очереди
Konstantin
не ну там сколько людей, столько и мнений, мб и да, есть смысл в том, чтобы вширь кандидата потестить
Konstantin
мне про очереди не особо интересно слушать, даже если он их не умеет, научить - дело пары дней
Konstantin
а вот людей, что базой нормально пользоваться умеют - единицы
Юра
Согласен но на собесах собеседующий бог и непонятно чем у него там в голове
Юра
Вероятнее всего от него ждут очереди
Юра
А не селект фор адейт
Konstantin
и типа еще лучше когда не городят инфру из кроликов чтобы попроцессить фоново 20 записей в сутки 🙂
Юра
Ну систему всеравно лучше проектировать в заделом на масштабирование
Юра
Сегодня 20 файлов, завтра 2000
Konstantin
Вероятнее всего от него ждут очереди
ладно, предлагаю убер-вариант: скрыть интерфейсом реализацию очереди, предложив на выбор два варианта. хотите вот вам редис, хотите - на постгре сделал, если надо придерживаться принципа минимальных зависимостей
Konstantin
я и так и так умею, надо и кроля подтащу
Юра
Вариант на каждцю строку сообщение круто, только не атомарно
Юра
Вдруг часть строк невалидны
Юра
Все от требований завистт
Konstantin
почему не атомарно? как раз наоборот, не?
Юра
Ну воркер строку получил я так понимаю
Konstantin
если в базе/очереди хранить прям csv line - не разбирать его
Юра
Или например файл и смещение
Юра
Как я понял твой замысел
Konstantin
не, прям строку по идее
Konstantin
смещения мутно больно
Юра
Ну вот а если 100001 строка невплидна
Юра
Следует ли импортировать остальные?
Юра
В этих гребаных заданиях часто еще не хватает условий входящих
Юра
У меня для этого поверх ребита есть либа которач позволяет создавать зависимые задачт
Юра
Я бы разбил на две подзадачи, валидацию и импорт. Сначала куча воркеров валидируют, после этого создаётся куча задач на импорт
Kirill
А почему вообще проблема возникает? Кладём файл на сервер, запускаем скрипт, который считывает файл построчно и пишет в бд. Лучше конечно пачками писать. При этом не будет нагрузки по памяти, она будет очищаться.
Или стоит задача с фронта загрузить файл и обработать его?
Павел
Задача с фронта получить файл, записать в бд, а потом на другой странице отрисовать данные из таблицы
Павел
Не знаю на сколько честно обсуждать тестовое с вами))