Я собираю показания нескольких тысяч датчиков и сохраняю их в базе данных MySQL. Есть несколько сотен вставок в секунду. Чтобы улучшить производительность вставки, я сначала сохраняю значения в буферной таблице MEMORY. Раз в минуту я запускаю хранимую процедуру, которая перемещает вставленные строки из буфера памяти в постоянную таблицу.
В основном я хотел бы сделать следующее в моей хранимой процедуре, чтобы переместить строки из временного буфера:
INSERT INTO data SELECT * FROM data_buffer;
DELETE FROM data_buffer;
К сожалению предыдущее невозможно использовать, потому что процессы сбора данных вставляют дополнительные строки в «data_buffer» между INSERT и DELETE выше. Таким образом, эти строки будут удалены без добавления в таблицу «данных».
Как я могу сделать операцию атомарной или сделать оператор DELETE для удаления только тех строк, которые были ВЫБРАННЫМ и ВСТАВЛЕНЫ в предыдущем операторе?
I предпочел бы делать это стандартным способом, который, по возможности, работает с разными ядрами баз данных.
Я бы предпочел не добавлять никаких дополнительных столбцов «id» из-за накладных расходов на производительность и требований к хранилищу.
Я бы хотел, чтобы была инструкция SELECT_AND_DELETE или MOVE в стандартном SQL или что-то подобное ...