1

我的应用程序有一个 Azure 移动服务后端。我以非常开箱即用的方式使用 MSSQL。但是,理论上我有多个客户端可以同时访问相同的对象。对我来说,适当的解决方案是使用乐观锁定来避免任何进一步的并发问题。

所以我的问题是这个。我有一个由后端填写的时间戳。我的问题是是否有一种巧妙的方法来处理在该过程中获取项目的“旧版本”,或者我是否被迫从数据库中手动查询对象 - 或者是否可以轻松地将日期约束合并到查询中,类似于

function update(item, user, request) {
    query.where...
    request.execute();
}

但是更新中没有查询?性能对我的应用程序很重要,因为我预计会有很多查询。

4

1 回答 1

0

乐观锁定对 Web 来说确实没有意义。您的读取和更新操作是无状态的,并且是独立请求的一部分(刷新 HTTP 可能是个好主意)。

这并不是说每个请求都不能使用事务(参见mssql对象http://msdn.microsoft.com/en-us/library/windowsazure/jj554212.aspx)。但是对于一个基本分布式的 Web 应用程序,跨多个请求引入事务通常是一个糟糕的架构决策。(见 CAP 定理)。

您可以使用 Azure 队列和消息(如命令和事件)来模拟事务或“传奇”,以更改数据库中的新状态,从而按用户管理锁定记录。或者您可以简单地使用另一个表来管理现有表的记录锁。无论哪种方式,您都必须在应用程序逻辑中明确记录锁定,因为读取和更新是不同的请求以及无状态 Web 和分布式计算的固有性质。

于 2013-10-10T15:45:08.950 回答