['id'=>1,'age'=>32] ....n ]
Есть ли возможность средствами ORM ларки обновить пачку данных в таблице ?
Хотел использовать метод upsert , но ругается на то, что мол не все поля с данными присылаю, а только часть.
заверни в транзакцию и в цикле запусти обновление по-строчно, что ты хочешь выиграть отправив это все одним запросом, на стороне базы данных в итоге будет тот же цикл с теме же проверками на существование, а может быть и того хуже попытки вставки получение ошибки и т.д.
upsert делает INSERT INTO table (...) VALUES (...), (...), (...) ON DUPLICATE KEY UPDATE (...) и это гораздо лучше циклов и т.п.. пусть даже и в транзакции
о каких объемах идет речь?
а что объемы вещь постоянная ? сегодня у него 10 строк .. а завтра в сотни раз больше
100 строк примерно за раз (но часто)
часто это как 60 раз в секунду или 1 раз в сутки
ну так проблема в том что при интсерте в таблицу не хватает данных , так как недостающие поля не имеют дефолтных настроек ... Вы либо передавайте их либо в таблице пропишите
тут все зависит от нагрузки, пока не могу точно сказать, но надо много и часто в минуту будет обновлять таблицу.
а, т.е. как вариант я же могу от балды указать значение недостающих полей, а обновить в итоге только нужное, так как я заведомо знаю что они есть
мое мнение, что upsert больше минусов, чем плюсов
да. это просто костыль для метода upsert получится
измените таблицу и костыль не понадобиться
ну или запрос )
Вы превратите 1 простое действие в цепочку последовательных действий
- если хоть с одной записью проблема, вся работа по бороде (в случае цикла можно пропустить и повторить работы с ошибочными записями) - улетающий в бесконечность целочисленный autoincrement - отлов где произошла ошибка, также сложно, т.е. что из 1000 строк sql вызвало проблему это то что по опыту вспомнилось а по скорости, в частности 90% когда база данных на том же сервере где и приложение особо выигрыша я не замечал а вот удобство поддержки построчной вставки/обновления, понимание что происходит, возможность задать значения по умолчанию в приложении, а не надеяться на базу данных, значительно превосходит выигрыш в доли секунд
Обсуждают сегодня