乐观锁定或条件更新

时间:2017-08-29 16:33:50

标签: sparql

我想实现Optimistic vs. Pessimistic locking

中提到的“乐观锁定”之类的东西

我有以下数据

:foo 
    :hasProp 'bar';
    :hasVersion '3'^^xsd:nonNegativeInteger
.

会话查询此数据并将信息保存在内存中。 然后它想发布更新。

当传递的版本为“3”时,我只希望更新成功,这意味着自会话读取:foo以来没有发生更新。

当传递的版本为!= 3但其他方式成功并将:hasVersion更新为'4'^^xsd:nonNegativeInteger并且例如:hasProp更新为{时,是否有办法使更新查询失败{1}}?

1 个答案:

答案 0 :(得分:2)

“失败”意味着没有数据匹配,即您可以使用FILTER。剩下的只有INSERTDELETE相应的数据:

PREFIX : <YOUR_NAMESPACE_HERE>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>

INSERT {
  ?s :hasProp "baz" .
  ?s :hasVersion "4"^^xsd:nonNegativeInteger
}
DELETE {
  ?s :hasProp "bar" .
  ?s :hasVersion ?v
}
WHERE{
  ?s :hasVersion ?v
  FILTER(?v = "3"^^xsd:nonNegativeInteger)
}