Azure SQL处理表锁定用于大型插入

时间:2014-05-03 05:01:39

标签: c# entity-framework azure-sql-database

在我的应用程序中,我有一个Windows服务(在azure web上托管为石英),它在特定时间后运行并读取文件并插入数据。数据可以是任意长度,因此DB中的类型是" text"。所有记录都插入一个表中。 问题是服务可能并行运行并尝试同时在表中插入记录。由于数据可能很大并且我也想要提高性能,我想让服务并行运行。我使用的是EF 6.0和LINQ。有没有办法不锁定表并插入大量数据。

注意:批量插入可能无法正常工作,因为要插入的数据类型包含' text'同样。

1 个答案:

答案 0 :(得分:0)

我假设你的表中有一列类型为“text”而没有别的。基于上述假设,如果你想并行运行,我认为不存在基本的语义问题。

有几种方法可以做到这一点:

  1. 使用带有行批处理的SqlBulkCopy类。这将复制批量行并将其加载到表中。这可以并行完成。

  2. 为每个服务使用临时登台表,然后为每个登台表运行INSERT INTO SELECT。 INSERT部分将是串行的,因为它将在表上进行X锁定,但这可能比从另一行加载一行更快。

  3. 这些方法都不使用EF 6.0和LINQ,但它们可以完成工作。

    希望这有帮助!