Как атомарно перемещать строки из одной таблицы в другую?

Я собираю показания нескольких тысяч датчиков и сохраняю их в базе данных 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 или что-то подобное ...

5
задан snap 3 August 2011 в 11:28
поделиться