GraphDB在事务中读取,检查和更新

问题描述 投票:0回答:2

我最近一直在阅读有关GraphDB的文章,并在文档中提到GraphDB是ACID兼容的。但是关于它走多远的文献非常有限。我正在开发REST API,并想知道如何使用GraphDB解决丢失更新的问题。对于每个资源,我们的API都返回一个Etag。当客户想要更新他们需要提供etag的资源时。然后在一个事务中,我想检查客户端提供的etag是否与数据库中的etag匹配,然后进行更新。在高并发使用中,可能有多个客户端可以呈现相同的etag,并且如果etag检查和更新不在同一事务中,则一个事务可以覆盖来自其他事务的更改。我的问题是,在执行检查时,GraphDB是否有可能获得某种读锁定,以便其他任何事务都无法更新该值?

graphdb
2个回答
1
投票

GraphDB是完全兼容的ACID数据库(http://graphdb.ontotext.com/documentation/free/storage.html#transaction-control)。您可以安全地拥有多个用户,并且与数据库没有任何单一交互可能会对其他交互产生副作用。并发读取或写入没有问题。此外,在GraphDB EE中,当用户执行包含多个“insert where”和/或“delete where”表达式由';'分隔的单个更新时在这种情况下,每个后续表达式都可以“看到”在同一更新中从先前的变量进行评估时的变化,但是范围是相同的复合更新。引擎不支持并发写入,因为我们无法保证数据的一致性特别是在涉及推理时。


0
投票

您可以在INSERT WHERE更新中添加etag检查。如果etag不匹配,插入将不插入三元组。

© www.soinside.com 2019 - 2024. All rights reserved.