我正在运营一个网站,帮助管理医疗诊所的大量信息。部分应用程序需要从Excel电子表格上传患者文件。患者表有大约100万条记录,excel导入需要一次插入或更新10k,20k,30k患者记录。其他客户一直在敲桌子。处理时间不如减少数据库争用。你会推荐什么策略?
我知道其他网站有效地做到了这一点。 Salesforce允许您一次上传大量数据。
答案 0 :(得分:4)
首先将Excel工作表加载到临时表,然后决定是在一个批处理中更新/插入行还是什么。
通常,从一个表到另一个表插入一百万行应该足够快,以便在服务器负载时运行。在插入过程中你会有一个锁,但它应该只需几秒钟。除非你每分钟加载数十亿条记录,否则你的upsert操作非常密集,我认为这不是问题。
如果你的upsert很复杂,有很多方法可以做到。您可以在单个批次中插入,但在更新其下级记录时将生产记录标记为不完整。您可以将暂存行标记为未处理并批量处理。
答案 1 :(得分:0)
如果每行更新都是独立的,请运行一个获取行的循环,更新表,获取另一行,...
然后你可以在循环中加一个延迟来减慢速度以避免影响主站点(可以使用某种负载指标来动态调整)。可以使用某种类似令牌环的设置来一起进行多次更新。