2015-09-07 203 views
0

我想知道OWLOntologyManager.addAxioms()操作有多昂贵?

OWLOntologyManager.addAxioms(OWLOntology ont, java.util.Set<? extends OWLAxiom> axioms) 

操作(时间方面)有多贵。我所要求的主要原因是我正在处理一个非常大的数据集,并且想知道在创建公理时立即将其添加到我的本体中会更有效率,还是等待所有公理准备就绪并将其添加到一个方法中呼叫?

另外,这仅仅是因为我很好奇,各种OWLAxiom创建方法的常量时间操作?如果不是,它们有多昂贵?

如果您想知道,我打算将缓冲区推理器应用于缓冲模式,并在所有本体修改完成后清空更改。

回答

2

添加公理需要更新一些映射(取决于公理的类型,可能存在一个或多个索引)。如果有听众在等待听到关于本体变化的信息,他们也会收到通知 - 无论是否执行昂贵的操作,听众都会知道。

Reasoners是一个听众的例子:通常他们会收集公理,直到flush()被称为临时收集。

时间成本方面,这应该相当于散列映射(或并发散列映射)中的一个或多个插入,以及通常包含很少元素的侦听器列表上的迭代。预计成本接近恒定,但是对于大型本体而言,内存使用的增加可能会导致垃圾收集速度放慢。

对于最近版本的OWL API(例如4.0.2),当从文件中解析本体时使用临时列表而不是集合来添加公理 - 这会降低散列成本。一旦加载完成后,这些列表就会变成集合 - 在第一次读取公理集合时,精确的是。

与推理成本相比,这些成本中的任何一项都应该是不相关的 - 推理预计需要更长的时间,因为它是一个更复杂的操作。

在这种情况下,一旦完成更改,缓冲和刷新就可能是最好的策略。

OWL API可以使用更好的批量插入公理,但是在当前版本中,添加一组公理和添加单个公理几乎没有区别。

+0

太棒了,感谢您的帮助! –