我正在从数千个传感器收集读数并将它们存储在MySQL数据库中。每秒有几百个插入操作。为了提高插入性能,我先将这些值存储到MEMORY缓冲表中。每分钟,我运行一个存储过程将插入的行从内存缓冲区移动到永久表中。
基本上,在我的存储过程中,我想要执行以下操作,从临时缓冲区中移动行。
基本上,在我的存储过程中,我想要执行以下操作,从临时缓冲区中移动行。
INSERT INTO data SELECT * FROM data_buffer;
DELETE FROM data_buffer;
很遗憾,之前的方法不可用,因为数据收集过程在上述INSERT和DELETE之间向"data_buffer"插入了额外的行。因此这些行将在未被插入到"data"表中的情况下被删除。
我该如何使操作具有原子性或使DELETE语句仅删除在前面语句中被SELECT和INSERT选择的行?
如果可能的话,我希望以标准方式执行此操作,以便在不同的数据库引擎上运行。
由于性能开销和存储要求较高,我不想添加任何额外的"id"列。
希望标准SQL中有SELECT_AND_DELETE或MOVE语句或类似的东西……
data_buffer
(time
int(11) NOT NULL,sensor
smallint(6) NOT NULL,value
float NOT NULL ) ENGINE=MEMORY DEFAULT CHARSET=latin1; - snap