我想为Optimistic vs. Pessimistic locking乐观锁或有条件更新
提到我有以下数据
:foo
:hasProp 'bar';
:hasVersion '3'^^xsd:nonNegativeInteger
.
一个会话查询这些数据,并保存在内存中的信息来实现类似“乐观锁定”。 然后它想要发布更新。
当传递的版本是'3'时,我只想要更新成功,这意味着自从会话已读:foo
以来没有发生更新。
有没有一种方法,使当通过的版本是!= 3
失败更新查询否则成功和更新:hasVersion
到'4'^^xsd:nonNegativeInteger
和例如:hasProp
到baz
?
我觉得要注意并记住SPARQL没有锁,也没有交易,也没有各种相关功能,不同于SQL是很重要的。一般而言,每个三元组(或有时候,每个四元组)都被原子处理。未来的发展可能会允许每个命名图都被视为一个存储中的原子(可能是可锁定的)实体,类似于SQL中的表。 SQL的行级锁定概念上看起来像是每个包含'?s'或'?o'位置的给定实体的三元组的SPARQL锁。 – TallTed
@TallTed谢谢你的提示。我期望一个更新查询被视为一个事务。你认为情况并非如此。我目前正在试验支持事务的Stardog,但我也对其他系统的信息感兴趣。 –
SPARQL更新的每个SPARQL查询应该在SPARQL协议调用时自动发生。本地API可能不同,但可能提供某种级别的并发或事务控制。 – AndyS