客户端累积记录的延迟写入(Delphi app - > SQL Server)

时间:2014-03-25 09:38:18

标签: sql sql-server delphi ado bulk

我的多线程Delphi应用程序解析了大约10万个市场优惠。每个工作线程将解析的数据写入远程SQL Server。目前,每个线程每秒解析3-4个商品,这意味着10个线程将大约35个调用更新发送到SQL Server。每一秒。

这个想法是实现优化的数据库写入 - 一种延迟批量更新。每个线程累积20-30个已解析的商品,然后在一次传递中将它们写入数据库。我认为这将比现有方法更加优化和有效。

我很高兴听到您的一般性意见和建议,并了解从Delphi应用程序到SQL Server数据库的延迟/延迟/粗略写入技术。

3 个答案:

答案 0 :(得分:0)

Delphi XE4包含FireDAC,它为您提供了两种解决方案:CachedUpdatesArray DML

答案 1 :(得分:0)

我喜欢@Uwe的建议。但是,如果您在没有FireDAC的情况下滚动自己的解决方案,则可以使用内存数据集作为缓冲区,然后将数据压缩到存储过程。

当然,这需要在代码之外进行更改,并且您需要适当的权限来创建存储过程等等。但是,如果这个想法吸引你,这里有两个可能有助于这种技术的链接:

答案 2 :(得分:0)

从平面文件到数据库也有很好的老式BULK INSERTS。使用我开发的大型数据传输应用程序(多年前),这是迄今为止最快的解决方案。但那是在大型插入语句之前,它只有在你可以延迟到至少1000行的批处理时才有效。

由于您只有两个非常简单的数字字段,因此您不必担心Unicode,分隔符,转义字符等。只需将中间结果写入一个简单的ASCII文件,然后在一个事务中将其插入BULK INSERT。

你必须确保这个工作是多线程的(使用唯一的文件名不应该太难),你必须试验你容忍的'延迟',无论你是否use table locks等。批量插入文件越大,获得的就越多。

确保将SQL Server事务日志记录设置为Minimal logging以阻止large transaction logs