我在Azure SQL中有一个具有多个记录的表。该表中的数据通过一个API层(基于实体框架)公开,该层实现了多个读/写方法。此API层封装在支持多个实例的工作者角色中。我有一个应用程序(一个桌面应用程序,而不是一个web角色),它可以在不同的客户端机器上同时运行。这个应用程序进行两个特定的调用--一个是读的,另一个是用上述API编写的。这两个调用都将从Azure SQL表访问相同的记录。我希望实现一种锁定机制,防止多个客户端尝试使用我的应用程序读取相同的记录。但是,这个记录级别的读锁应该只在发出一个特定的读取调用(API公开的许多读取调用中)时才适用。虽然我已经知道了如何锁定记录,但我不知道如何实现特定于特定调用的锁。当我们考虑实现API的worker角色有多个实例正在运行时,这就更加复杂了。
到目前为止,我已经考虑了一些想法:
任何指点都会受到赞赏。
更新:
在我的应用程序使用的特定读取调用中使用互斥似乎是一种可能的解决方案。
发布于 2013-05-02 14:29:28
我不会质疑您为什么要这样做,但是由于复杂性的原因,我远离这种类型的设计,并且通常实现乐观的并发性。
为了直接回答您的问题,我可能会实现Windows缓存,如果这对您的设计有意义的话,可能会使用过期窗口。您可以将主键(PK)值放置在缓存中,并在返回记录之前验证该值是否在缓存中。如果是,则不返回记录;它不是,而是允许读取并将PK放在缓存中。
https://stackoverflow.com/questions/16327775
复制相似问题