Как быстро добавлять / обновлять миллионы строк в БД Laravel?

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

Проект поделён как бы на 2 части. Первая часть - это API, который крутится на отдельном сервере, а вторая - пользовательская часть. Базы тоже две.

На сервер с API буквально каждую минуту приходят десятки тысяч новые строк, которые нужно заносить в БД. Мы используем для этого "очереди". Но скорость не устраивает(. Хотя подняли уже 10 воркеров. Таблица "jobs" просто не вывозит такой приток новых данных и постоянно растёт, что соответственно даёт большую нагрузку на сервер.

Вот как быть? Как менее затратно по ресурсам обновлять миллионы строк в БД ? И подходят ли вообще для этого очереди?
  • Вопрос задан
  • 353 просмотра
Пригласить эксперта
Ответы на вопрос 3
ipatiev
@ipatiev
Потомок старинного рода Ипатьевых-Колотитьевых
Для сферического обновления в вакууме не нужно вообще ничего.
БД спокойно по умолчанию пишет десятки тысяч строк в секунду.
То есть просто записывать и всё.

При возникновении конкретных проблем надо собраться с мыслями и задать конкретный вопрос, детально описывая проблему. А не вот это вот "ну у нас там много всего и растёт нагрузка".

В качестве чисто гадательной рекомендации поиграться с innodb_flush_log_at_trx_commit / транзакции.
Ответ написан
Комментировать
@rPman
Вопрос не как добавляешь, а как потом эти данные читаешь, как ведёшь выборку.

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

Заведи патриции например по времени, если характер данных - временные ряды
Ответ написан
Комментировать
@t38c3j
Мало входных данных. Все что можно сделать с минимальными телодвижениями:
1. Очередь перевести на redis
2. С помощью очереди можете накопить данные, а потом забрать с нее пачкой и записать в базу
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы