deadloop
@deadloop
Активно осваиваю PHP

Как добавить записи в базу пачками (например по 100 шт.)?

Доюрый всем. У меня есть две базы, мне нужно из одной базы передать данные в другую, записей 17 тысяч. Мне нужно передать данные пачками, есть метод chunk() который разделят данные, он почему-то у меня не работает, где ошибка не пойму, возможно я не правильно оформил.

Как передать данные полностью , я разобрался.

Вот код когда передаем все сразу
$groups = DB::connection("oracle")->table('STAT.ANSWERS')->get();

        foreach ($groups as $group) {
            DB::connection()->insert('insert into stat (title) values (?)', [$group->competence]);
        }


А вот код для разбития записей, и он не работает
$groups = DB::connection("oracle")->table('STAT.ANSWERS')->get();

$groups->chunk(100, function ($groups) {
            foreach ($groups as $group) {
                DB::connection()->insert('insert into stat (title) values (?)', [$group->competence]);
            }
            
        });
  • Вопрос задан
  • 118 просмотров
Решения вопроса 1
@rPman
Чтобы данные быстро добавить в базу данных нужно следующее:
* делать все операции в одной транзакции (сотни вставок в пределах транзакции) т.е. стартуешь транзакцию, в цикле создаешь 100 записей, закрываешь транзакции, повторить с новыми данными.
* отключить на время вставки индексы и констрейнты, особенно это имеет смысл когда переносится действительно много данных, само собой после включить (если будут конфликты в данных то индексы или констрейнты не добавятся с ошибкой)

p.s. larvel и oracle? чувствую некоторое несоответствие, как минимум ценовое
Когда то давно давно я видел попытки вытащить в веб базу на оракле, получилось не очень быстро и в качестве гениального решения была прослойка на mysql ;)
Очень смешно но тогда был вопрос 'политический', обязательно было надо пользоваться oracle и никак иначе.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы