【发布时间】:2013-04-29 15:49:49
【问题描述】:
我们有一个可以读写第三方数据存储的应用程序。 该数据存储的代码是闭源的,我们不知道也无法更改。 只有一个纤薄的 API 允许对其进行读写。
pessimistic offline lock 有助于跨越事务并让并发应用程序使用它。我相信这会很好。
但是现在我们遇到了其他软件也会对该存储进行读写的问题 当数据存储发生变化时,我们的应用程序将更新。数据存储本身不提供任何通知。第三方软件不会改变一些全局状态,表明某些东西已经改变。
是否有任何模式或最佳实践来“观察”该数据存储和 发布事件以更新(我们软件的)所有客户端?
如果不是,我真的不想定期阅读、比较和发布事件 绝对是最后的手段。也许有人在这里有更好的主意?
【问题讨论】:
-
什么是第三方数据存储?
-
非系统实现的悲观离线锁需要所有可能的数据修改者之间的合作/参与/执行。这通常是不可能的,也是现代软件很少采用这种方法的两个原因之一。要以一种有用的方式远程执行类似这样的操作(即,使用多个异类编写器)需要系统设施本身的某种帮助/协助。
-
@rie819 它是一个像存储一样不广为人知的数据库,在这里无关紧要,因为它是一个架构问题。
-
@RBarryYoung 好的,什么是现代替代方案?请您为此类问题提出一些解决方案吗?第二个原因是什么?
-
@MareInfinitus 第二个原因是确定和解决废弃锁的问题。至于可能的解决方案,如果您坚持认为这只是一个 OOD 问题,那么要么乐观离线锁定,这仍然需要一些系统帮助,但要少得多,或者通过更详细的数据状态进展/控制来完全避免这个问题模型。但是,我的 方法是认识到这主要是数据存储功能的问题,并从那里开始,寻求使用系统提供的锁定/事务控制,这两者都 1) 有效,并且 2 ) 是通常的做法。
标签: c# database design-patterns concurrency