DatasetGraphInMemory的后端在Jena的事务外是否优于TripleStoreMem



我只是想知道,如果在一个上下文中,事务不是必需的,也不是quads,而是对模型进行大量的sparql查询,那么TripleTable是否优于TripleStoreMem(考虑到它们的包装(

所以不是

ModelFactory.createDefaultModel()

默认怎么样

DatasetFactory.createTxnMem().getDefaultModel

在第二种情况下,我当然会保留数据集,但让它的默认模型读取并查询数据集。

在第二个模型(即其数据集(上运行查询是否会优于在第一个模型(也就是它无论如何都会自动包装的数据集(中运行查询。

底线是两者都有不同的机制支持,我想知道这对特定的用例是否重要,在特定的用例中,目标只是在准备好模型后对其运行查询

问题的一个延伸是,在不需要事务或持久性,只需要查询速度的情况下,用于执行此类操作的最具性能的后端(模型/图(是什么。

编辑1

我之所以在交易中详细说明,是因为我遵循了两份文件。

的Javadoc

public static DatasetGraph createTxnMem() { return new DatasetGraphInMemory(); }

表示

它提供了"自动提交";如果操作是在事务之外执行的,但会对性能产生影响(实现会在每次添加或删除时添加一个begin/commit,因此开销可能会累积(。

然而,考虑到DatasetGraphInMemory没有记录在java之外的官方文档中,我能找到的最接近的是TDB教程。上面写着:

TDB支持用于RDF数据集上事务的通用Jena API(在Jena 2.7.0,ARQ 2.9.0中介绍(

TDB支持的数据集可以非事务性使用,但一旦在事务中使用,就必须在事务之后使用。

因此,我认为这可能适用于DatasetGraphInMemory,因为它们基本上有相同的祖先。TDB专门用于持久性。

然而,它似乎不能非事务性地使用,因为自动提交无论如何都会启动。

因此,我需要手动管理交易吗?如果我只想要速度,这值得吗?我真的会获利吗?

它将取决于使用情况。

TIM(TIM="Transactions In Memory"=DatasetGraphInMemory(使用持久数据结构(在"持久"的功能编程意义上(。实现由Dexx集合提供。

它生成更多的短期对象,因此具有GC效果。

在大量非常小的更新的情况下,TIM可能较慢。考虑到应用程序的其余部分,这是否可观察到取决于情况。

最新更新