【问题标题】:How to continuously import data from external service into SQL Server如何将数据从外部服务持续导入 SQL Server
【发布时间】:2019-11-12 23:29:57
【问题描述】:

我有近百个服务向我们的消息队列发送数据。此数据由 Java 服务处理并加载到我们的 SQL Server 中的导入表中。加载数据后,会执行一些将这些数据加载到适当表中的过程。最近我们不得不添加新的服务读取和加载消息实例。有人建议我们应该将数据库隔离模型更改为快照(我对数据库不太习惯,所以我只是按照建议的方式进行了操作)。不幸的是,我们遇到了很多问题,所以我们不得不复制导入表和前面提到的过程——这当然导致了我目前正在尝试清理的巨大混乱。

我目前的理解是,建议使用快照隔离,以便服务可以使用同一个表工作,而不会出现我们遇到的问题和错误,这些问题和错误源于我们(开发人员)方面的一些误解或不正确的实施。

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

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

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

【问题讨论】:

    标签: sql-server concurrency bulkinsert isolation-level


    【解决方案1】:

    我结束了对加载数据和导入表的服务的修改,使每条加载的记录都有自己的标识符。此外,服务不再执行导入过程,它们使用 SQL 代理进行调度并每分钟运行一次。解决方案非常简单,虽然数据平均在服务接收到 30 秒后存储在目标表中,但这是我们可以接受的——我们可以通过这种方式加载更多、更多、更多的数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-02
      相关资源
      最近更新 更多