我正在使用一个简单的 Jena 数据集,它只导入了一个 ~30 MB RDF 文件。作为应用程序的一部分,我试图让用户查询默认图(或命名图)并将查询得到的三元组插入到新的命名图中。为此,我使用 CONSTRUCT 语句以 RDF 形式形成三元组的结果集,然后将这些三元组放入新模型(使用 QueryExecution.execConstruct())并将此模型添加到数据集中。这似乎再次起作用,因为数据集获得了一个新的图形节点,并且 TDB 数据库文件夹的磁盘大小增加了。
当我尝试从数据集中删除命名图时,就会出现这里的问题。使用 Dataset 的 removeNamedName("graphName") 方法,我从数据集中删除模型。以后对该模型名称的查询表明它已被成功删除。但是,TDB 数据库文件夹的磁盘大小保持不变,即使在同步和退出之后也是如此。
起初我以为数据库可能只是将已删除文件的空间标记为空闲,以便在新数据进入时可以将其覆盖,但事实似乎并非如此。如果我删除一个命名图并在同一程序运行后立即替换它,该文件夹似乎没有增长,但如果我添加一个新的命名图并在同一运行中删除它,文件夹大小会变大,模型删除不会释放内存,这意味着在几次运行后,数据库文件夹的大小是其原始大小的五倍或十倍,而不再保存任何数据。
任何见解或帮助都会很棒,再次感谢。