загрузить данные без файла в MySQL с переполнением стека

Я получаю файлы в потоковом режиме раз в 30 секунд. Файлы могут иметь до 40 столбцов и 50000 строк. Файлы являются TXT-файлами и разделены табуляцией. Прямо сейчас я сохраняю файл временно, сохраняю содержимое загрузить данные во временную таблицу в базе данных и затем удалите файл.

Я хотел бы избежать процесса сохранения и удаления и вместо этого сохранить данные непосредственно в базу данных. Поток является $output Вот:

protected function run(OutputInterface $output)
{
$this->readInventoryReport($this->interaction($output));
}

Я все время гуглял, пытаясь найти «производительность — это большая проблема» — верный ответ на этот вопрос, но я не могу найти хороший способ сделать это без сохранения данных в файл и использования загрузки данных , Мне нужно, чтобы содержимое было доступно быстро и работало с ними после их сохранения во временной таблице. (Обновить другие таблицы с содержанием …)

Есть ли хороший способ справиться с этим, или метод сохранения и удаления файла вместе с загрузкой данных infile будет лучше, чем другие решения?

Сервер, на котором я работаю, имеет SSD и 32 ГБ оперативной памяти.

1

Решение

LOAD DATA INFILE это ваш самый быстрый способ сделать тоннажем данных в MySQL с малой задержкой.

Вы можете написать себе php-программу, которая, используя подготовленные операторы и т. П., Довольно хорошо вставит строки в вашу базу данных. Если вы договорились сделать COMMIT каждые пару сотен строк, и использовать подготовленные операторы, и тщательно писать свой код, это будет довольно быстро, но не так быстро, как LOAD DATA INFILE, Зачем? Операции с отдельными строками должны быть сериализованы в сетевой провод, затем десериализованы и обработаны по одной (или двум, или десяти) за раз. LOAD DATA просто хлюпает ваши данные локально.

Похоже, у вас есть хороший сервер MySQL. Но сериализация все еще является узким местом.

50 тысяч записей каждые 30 секунд, а? Это много! Являются ли какие-либо из этих данных избыточными? То есть какие-либо строки в более позднем пакете данных перезаписывают строки в более раннем пакете? Если это так, вы можете написать программу, которая будет пропускать строки, которые устарели.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]