如何将数据从外部服务连续导入SQL Server

时间:2019-07-02 10:26:33

标签: sql-server concurrency bulkinsert isolation-level

我有将近100个服务将数据发送到我们的消息队列。此数据由Java服务处理,并加载到我们的SQL Server中的导入表中。加载数据后,将执行一些过程将这些数据加载到适当的表中。最近,我们不得不添加新的服务读取和加载消息实例。有人建议我们应该将数据库隔离模型更改为快照(我对数据库不是很习惯,所以我只是做了建议的事情)。不幸的是,我们遇到了很多问题,因此我们不得不重复导入表和上述过程-当然,这导致我目前正在尝试清理的一团糟。

我目前的理解是建议使用快照隔离,以便服务可以使用同一张表运行而不会遇到我们(开发人员)方面的某些误解或不当实施而引起的问题和错误。

我的问题是:是否有可能,如果可以,那么如何将数据批量加载到单个表中,进行转换并加载到目标表中(所有并行,所以可以说有3或4个服务在做)不会导致死锁或数据丢失。

我们的SQL Server是:Microsoft SQL Server 2014(SP2-GDR)(KB4019093)-12.0.5207.0(X64)

我所了解的不多,但是我知道例如我们不支持分区或在线索引创建-也许这会有所帮助。

1 个答案:

答案 0 :(得分:0)

我结束了对服务加载数据和导入表的修改,以使加载的每个记录都有自己的标识符。此外,服务不再执行导入过程,而是使用SQL Agent安排它们,并且每分钟运行一次。解决方案确实非常简单,虽然平均数据在服务接收到数据后30秒就存储在目标表中,但这是我们可以忍受的-我们可以以这种方式加载很多很多数据。

相关问题