在读时锁定表
本文关键字:锁定 | 更新日期: 2023-09-27 18:16:57
我有一个需求,其中一个web服务被调用来生成列表中的下一个数字。
有多个客户端,我不想锁定整个表,只锁定我正在获取下一个号码的客户端的记录。每个客户端都有自己的编号系统。
但是,我需要表在读取特定记录时被锁定,以便我可以生成新数字,保存并返回它。
我正在考虑将整个列表加载到内存中,在那里进行更改,然后简单地使用enqueue和dequeue来堆栈请求,但这不是以客户端为中心的。在一天结束的时候不应该是一个问题,因为请求会很低。
我们正在使用实体框架和LINQ进行数据访问。
我想我问的是你可能会用什么方法来锁定读作为主要问题。
假设你使用的是SQL Server,我们处理这个问题的方式是在SELECT语句中执行带有UPDLOCK表提示的SQL查询。
我们通常在insert中使用它来获取下一个记录号(而不是我们的数据库设计):
INSERT
INTO TableName (RecordNumber)
SELECT ISNULL(MAX(RecordNumber, 0) + 1
FROM TableName WITH (UPDLOCK)