2
我有以下问题,我正在使用RavenDB在无状态REST服务器中实现队列抽象。如何在RavenDB中实现原子并发读取文档?
假设我有2 REST调用A和B
当调用一个正在发生的事情我查询了最后一个项目(项目一)队列,并给它打电话A.
如果呼叫B称为在呼叫A的同时 - 这可能发生在REST呼叫中,因此我需要防止程序给予呼叫B与A相同的项目,这意味着呼叫A应该“锁定”项目A.
标准的多这里的螺纹保护是一个简单的锁,我如何将这个想法转化为RavenDB和REST的情况?
P.S我用Nancy为REST服务器
是否有这样的情况,即两个调用在同一时间完全更新并且不会引发异常?我想这取决于它是如何在RavenDB内实现的 – 2012-01-03 07:00:15
不,这是不可能的。您对SaveChanges调用之间文档的所有更改都是完全事务性的,这意味着全部或者没有成功。在Session上启用OptimisticConcurrency可以保证没有其他人修改过文档。 (顺便说一句:RavenDB甚至支持System.Transaction,这样你就可以跨越更长的事务,但这对你的情况没有任何意义,就像信息一样)。 – 2012-01-03 13:22:07
@DanielLang嗨丹尼尔,你的回答非常有帮助。只是想通过在'Processed'之类的单个字段上使用UseOptimisticConcurrency来问,它能保证访问RavenDB集群的许多客户端(在分布式环境中)的原子性?或者我需要一个明确的'交易'?非常感谢。 – Dodd 2012-03-16 07:54:21