可能发生的事情是您的数据在更新过程中被“锁定以进行更新” – 这取决于数据的重新计算方式.
解决此问题的一种好方法是将新计算放入单独的数据区域,然后在完成所有操作后切换到使用新数据.实现此目的的一种方法是使用数据库视图和版本号,如下所示:
create table my_statistics (
id int not null primary key auto_increment,
version int not null,
-- other columns with your data
);
create table stats_version (current_version int); -- holds just one row
create view stats as
select *
from stats_version v
join my_statistics s on s.version = v.current_version);
将新统计数据放入表中,版本号为current_version 1.完成所有计算后.然后一个简单的更新stats_version set current_version = current_version 1将切换到使用新数据.这最后一个语句只需几毫秒即可执行,因此锁定等待很小.
切换后,您可以删除旧的统计数据以节省空间.
使用“切换”方法进行更新和“原子更新” – 更新“立即完全”发生,因此用户看不到部分更改的数据集.