我最近一直在阅读有关GraphDB的信息,在文档中提到GraphDB符合ACID。但是关于进展的文档非常有限。我正在开发REST API,想知道如何解决GraphDB更新丢失的问题。对于每种资源,我们的API都会返回一个Etag。当客户想要更新资源时,他们需要提供etag。然后在事务中,我想检查客户端提供的etag是否与数据库中的etag匹配,然后进行更新。在高并发使用率下,可能有一个以上的客户端可以显示相同的etag,并且如果etag检查和更新不在同一事务中,则一个事务可以覆盖其他事务的更改。我的问题是,执行检查时GraphDB是否有可能获取某种读取锁,以便其他任何事务都无法更新该值?
答案 0 :(得分:1)
GraphDB是完全兼容的ACID数据库(http://graphdb.ontotext.com/documentation/free/storage.html#transaction-control)。您可以安全地拥有多个用户,并且与数据库的任何交互都不会对其他交互产生副作用。并发读取或写入没有问题。此外,在GraphDB EE中,当用户执行单个更新时,包含多个用“;”分隔的“插入位置”和/或“删除位置”表达式。在这种情况下,每个后继表达式在同一更新中从前一个表达式进行评估时都可以“查看”更改,但范围是相同的复合更新。引擎不支持并发写入,因为我们不能保证数据的一致性,尤其是涉及推理时。
答案 1 :(得分:0)
您可以在INSERT WHERE更新中添加etag检查。如果etag不匹配,则插入内容将不插入任何三元组。