首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅在特定调用访问时锁定Azure SQL记录

仅在特定调用访问时锁定Azure SQL记录
EN

Stack Overflow用户
提问于 2013-05-01 22:56:37
回答 1查看 775关注 0票数 0

我在Azure SQL中有一个具有多个记录的表。该表中的数据通过一个API层(基于实体框架)公开,该层实现了多个读/写方法。此API层封装在支持多个实例的工作者角色中。我有一个应用程序(一个桌面应用程序,而不是一个web角色),它可以在不同的客户端机器上同时运行。这个应用程序进行两个特定的调用--一个是读的,另一个是用上述API编写的。这两个调用都将从Azure SQL表访问相同的记录。我希望实现一种锁定机制,防止多个客户端尝试使用我的应用程序读取相同的记录。但是,这个记录级别的读锁应该只在发出一个特定的读取调用(API公开的许多读取调用中)时才适用。虽然我已经知道了如何锁定记录,但我不知道如何实现特定于特定调用的锁。当我们考虑实现API的worker角色有多个实例正在运行时,这就更加复杂了。

到目前为止,我已经考虑了一些想法:

  1. 存储过程:Entity Framework - Read Lock on Record。这会遇到只为特定读取调用锁定行的问题。
  2. 关键部分锁定了我的应用程序使用的API中的read调用。但是,当工作人员的多个实例正在运行时,这不会有帮助,因为关键区段锁只在实例级别。
  3. 使用将在进行第一次读取时标记为true的附加IsProcessing列。这可以与idea-1和/或idea-2一起使用。
  4. 重构我在API中使用的读取调用来实现row level locking。由于我的应用程序是唯一使用此特定读取调用的应用程序,这可能是一种可能的解决方案,但是如何只为此调用启用锁定,因为来自其他API调用的其他读取仍然应该成功.还有物流问题,因为这个想法是绝对的最后手段,我真的不想实施,如果可能的话。

任何指点都会受到赞赏。

更新:

在我的应用程序使用的特定读取调用中使用互斥似乎是一种可能的解决方案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-02 14:29:28

我不会质疑您为什么要这样做,但是由于复杂性的原因,我远离这种类型的设计,并且通常实现乐观的并发性。

为了直接回答您的问题,我可能会实现Windows缓存,如果这对您的设计有意义的话,可能会使用过期窗口。您可以将主键(PK)值放置在缓存中,并在返回记录之前验证该值是否在缓存中。如果是,则不返回记录;它不是,而是允许读取并将PK放在缓存中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16327775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档