从两个不同的程序向同一表(SQL Server)中插入新行(不更新现有行)会带来什么后果?
我有一个Windows服务,该服务可对db进行大量插入(每秒插入1次,有时更快)。我想使该服务具有可伸缩性(我想在许多计算机上运行相同的服务)。恐怕在插入过程中会引起问题。
如果这是问题所在,请问如何处理? (我并不是在要求“最好”的方式,所以这不是一个自以为是的问题。)
我的第一个想法是创建一个带有队列的新服务-“数据访问服务”。这将是唯一与数据库通信的服务。当其他服务要插入某些内容时,它们将连接到该服务。我不知道这是否算是过大了。有没有更好的办法?或者,也许我根本没有问题,并且由SQL Server处理(这很理想)?
答案 0 :(得分:1)
SQL-Server被设计用于并发使用。因此,不,从其他程序插入不是问题。
如果插入,更新,删除和选择被交错,则会出现问题。这可能会导致结果不一致。在这种情况下,需要明智地使用交易。
每秒事务数(TPS)高度取决于所使用的硬件,数据库模式,服务器配置等。因此,我无法为您提供确切的数字,但是您可以期望它可以处理数百甚至数千个TPS。
答案 1 :(得分:0)
创建一个存储过程以插入数据并返回scope_identity,以便您可以根据需要重新选择数据。在此存储过程中,您使用事务。
您可以锁定表,就像在this answer中找到的那样,但是如果没有的话,应该没问题。您can block来自交易内,但无需这样做。
Here还有更多提示和高级技巧,但这可能会令人难以理解。