乐观锁定或条件更新
Optimistic locking or conditional update
我想实现 "optimistic locking" 中提到的 Optimistic vs. Pessimistic locking
我有以下数据
:foo
:hasProp 'bar';
:hasVersion '3'^^xsd:nonNegativeInteger
.
A会话查询此数据并将信息保存在内存中。
然后它要发布更新。
我只希望更新成功,当传递的版本为“3”时,这意味着自会话读取 :foo
以来未发生任何更新。
有没有一种方法可以使更新查询在传递的版本为 != 3
时失败,但在其他情况下会成功并将 :hasVersion
更新为 '4'^^xsd:nonNegativeInteger
,例如 :hasProp
到 baz
?
"Fails" 表示没有数据匹配,即您可以使用 FILTER
。剩下的就INSERT
和DELETE
对应的数据:
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)
}
我想实现 "optimistic locking" 中提到的 Optimistic vs. Pessimistic locking
我有以下数据
:foo
:hasProp 'bar';
:hasVersion '3'^^xsd:nonNegativeInteger
.
A会话查询此数据并将信息保存在内存中。 然后它要发布更新。
我只希望更新成功,当传递的版本为“3”时,这意味着自会话读取 :foo
以来未发生任何更新。
有没有一种方法可以使更新查询在传递的版本为 != 3
时失败,但在其他情况下会成功并将 :hasVersion
更新为 '4'^^xsd:nonNegativeInteger
,例如 :hasProp
到 baz
?
"Fails" 表示没有数据匹配,即您可以使用 FILTER
。剩下的就INSERT
和DELETE
对应的数据:
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)
}