以最小的争用将大量数据上传到生产sql server

时间:2009-04-09 22:52:37

标签: sql-server upload

我正在运营一个网站,帮助管理医疗诊所的大量信息。部分应用程序需要从Excel电子表格上传患者文件。患者表有大约100万条记录,excel导入需要一次插入或更新10k,20k,30k患者记录。其他客户一直在敲桌子。处理时间不如减少数据库争用。你会推荐什么策略?

我知道其他网站有效地做到了这一点。 Salesforce允许您一次上传大量数据。

2 个答案:

答案 0 :(得分:4)

首先将Excel工作表加载到临时表,然后决定是在一个批处理中更新/插入行还是什么。

通常,从一个表到另一个表插入一百万行应该足够快,以便在服务器负载时运行。在插入过程中你会有一个锁,但它应该只需几秒钟。除非你每分钟加载数十亿条记录,否则你的upsert操作非常密集,我认为这不是问题。

如果你的upsert很复杂,有很多方法可以做到。您可以在单个批次中插入,但在更新其下级记录时将生产记录标记为不完整。您可以将暂存行标记为未处理并批量处理。

答案 1 :(得分:0)

如果每行更新都是独立的,请运行一个获取行的循环,更新表,获取另一行,...

然后你可以在循环中加一个延迟来减慢速度以避免影响主站点(可以使用某种负载指标来动态调整)。可以使用某种类似令牌环的设置来一起进行多次更新。