如何避免多线程应用程序中的重复记录?

时间:2014-06-14 15:13:23

标签: sql-server multithreading sql-server-2008-r2

我有多个线程生成数据并将它们存储到DB中。生成的数据可以重复。我不想在DB中重复。我目前的解决方案是使用C#代码中的锁来强制多个线程同步写入DB。即每个线程检查其数据是否已存在于DB中并仅存储新数据。但这似乎伤害了表现。有没有更好的解决方案?也许让数据库来处理重复?

我正在使用SQL Sever 2008 R2。

2 个答案:

答案 0 :(得分:2)

您可以使用唯一索引和约束来防止数据库中的重复项。您可以在出版发生时处理异常。

答案 1 :(得分:1)

如果存在标识每一行的唯一键,则可以在表上放置唯一约束以防止出现重复。它使用索引来检查唯一性,因此它应该是有效的。

此外,SQLServer可以向客户端应用程序中的C#代码返回错误消息,以告知他们违反了约束。

根据其他信息进行编辑: - 如果您的唯一列超过900个字节,请尝试基于触发器的解决方案或唯一列的MD5(仅64个字节),并根据MD5列创建唯一约束。您可以使用计算列来实现此目的,例如。

    ALTER TABLE dbo.LookupValues ADD bigColumnhash AS
    HASHBYTES('SHA2_512', bigColumn) PERSISTED;
    GO


    CREATE UNIQUE NONCLUSTERED INDEX ix_LookupValues_bigColumnhash
    on dbo.LookupValues (bigColumnhash) INCLUDE (bigColumn);
    GO