我一直在将我的代码从没有事务的TDB支持的模型转换为使用TDB支持的事务模型。在没有事务的情况下,据我所知(也来自this mailing list post),在没有事务的情况下,在修改数据集之后,有必要调用model.close(),以确保数据集被正确同步,并且自动执行dataset.sync()。
我注意到有两组控制事务的方法:
dataset.begin()和dataset.commit()等
model.begin()和model.commit()等
这两组方法有什么不同?调用model.commit()与调用dataset.commit()的方式是否与model.close()自动处理dataset.sync()的方式相同
我希望这是清楚的。
发布于 2012-08-01 01:08:10
model.commit()是在SPARQL发明RDF之前,在模型中存储单元时设计的旧接口。
dataset.begin接受一个读/写标志。dataset.begin(ReadWrite.READ)。通过知道这是一个读事务,系统可以更高效地进行(以后不需要管理潜在的写操作),而且锁也不会有问题(两个事务在对其他视图进行读操作时,每个事务都试图启动一个写操作)。
TDB事务是完全可序列化的,并且在数据集级别工作。
TDB事务允许写入器在旧的读事务仍处于活动状态时启动,对于自读事务启动以来已经提交的任何深度的新写入器。不同的事务会看到数据库的不同状态,每个状态都是一致的。没有脏读。
https://stackoverflow.com/questions/11658818
复制相似问题