OWLOntologyManager.addAxioms() 操作有多昂贵?

How expensive is the OWLOntologyManager.addAxioms() operation?

我想知道

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

操作是。我问的主要原因是我正在处理一个非常大的数据集,想知道在创建公理时立即将公理添加到我的 ontology 或等到所有公理准备就绪后再添加是否会更有效它们在一个方法调用中?

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

以防万一你想知道,我计划在缓冲模式下应用 pellet reasoner,并在所有 ontology 修改完成后刷新更改。

添加公理需要更新一些映射(根据公理的类型,可能存在一个或多个索引)。如果有听众等待听到 ontology 的更改,他们也会收到通知 - 是否执行昂贵的操作取决于听众。

推理器是听众的一个例子:通常它们会收集公理,直到 flush() 被调用,在一个临时集合中。

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

对于 OWL API 的最新版本(例如 4.0.2)添加公理作为 ontology 从文件中解析使用临时列表而不是集合 - 这降低散列成本。一旦加载完成,列表就会变成集合 - 准确地说,是在第一次读取公理集合时。

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

缓冲,然后在更改完成后刷新可能是这种情况下的最佳策略。

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