我一直在将我的代码转换为使用没有事务的TDB支持模型,而是使用带有事务的TDB支持模型。没有事务,据我所知(也来自this mailing list post)没有事务,在修改数据集后,有必要调用model.close()
以确保数据集正确同步并自动执行{{ 1}}。
我注意到有两套控制事务的方法:
dataset.sync()
和dataset.begin()
等
dataset.commit()
和model.begin()
等
这两套方法有什么区别?调用model.commit()
是否与model.commit()
相同,dataset.commit()
会自动处理model.close()
吗?
我希望这很清楚
答案 0 :(得分:0)
model.commit()
是在使用SPARQL发明RDF数据集之前存储单位的模型时设计的旧界面。
dataset.begin
采用读/写标志。 dataset.begin(ReadWrite.READ)
。通过知道它是一个读取事务,系统可以更有效地进行(以后没有管理员可用于潜在的写入),并且锁定也没有问题(每个尝试在向其他视图进行读取时尝试启动写入操作的两个事务)。
TDB交易是完全可序列化的,可在数据集级别工作。
TDB事务允许编写器在旧读取事务仍处于活动状态时启动,因为自读取事务启动以来已提交的任何深度的新写入器。不同的事务看到数据库的不同状态,每个状态是一致的。没有脏读。