[英]What is the best design pattern for preventing duplicate submissions?
我一直在努力解决如何最好地防止重复发布数据的设计模式。
步骤如下:
这里是场景:客户提交的GUID为“ 1”的数据,然后在步骤(5)被命中原始数据提交之前,重新提交GUID为“ 1”的数据,然后该交易被处理两次。
在不使用信号量或阻塞的情况下,防止这种情况的最佳设计模式是什么? 如果第一次提交由于某种原因(服务器端的硬件问题等)而失败,则用户应该能够重新提交。
谢谢!
您可以通过使用读取未提交的数据的查询来实现步骤2。 例如,如果您使用的是MS SQL Server,则可以执行以下操作:
IF NOT EXIST(SELECT * FROM SomeTable (NOLOCK) WHERE Guid = @ClienGUID)
BEGIN
-- Insert the GUID ASAP in the transaction so that the next query will read it
-- Do steps 3-5
END
这里的关键是(NOLOCK)提示,它读取未提交的数据
将GUID存储在具有SQL UNIQUE
约束的列中。
当您尝试(在事务内)插入第二个重复的GUID时,该操作将失败,此时您将回滚整个事务。
我不知道您正在使用什么来开发前端,但是在Web应用程序中,您可以使用ajax来检查服务器转换状态,以便在等待时为用户提供一些反馈,还可以禁用Submit选项。
您可以对用户提供的数据进行哈希处理并将其存储在表中吗?在继续操作之前,请检查哈希与先前提交的数据是否匹配?
制作一个表running_transactions,用于存储当前正在运行的事务的GUID,即
注意-仅当此表保持明亮(不超过1M条记录)并且选择和删除有效时,此方法才有效。 您也可以索引GUID列。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.