首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何减少TDB支持的Jena数据集的大小?

问如何减少TDB支持的Jena数据集的大小?
EN

Stack Overflow用户
提问于 2012-06-18 17:36:47
回答 1查看 1.4K关注 0票数 7

我使用的是一个简单的Jena数据集,它只导入了一个~30 MB的RDF文件。作为应用程序的一部分,我试图让用户查询默认图(或命名图),并将查询的结果三元组插入到新的命名图中。为此,我使用一个构造语句以RDF形式形成三元组的结果集,然后将这些三元组放入一个新模型(使用QueryExecution.execConstruct())并将该模型添加到dataset中。随着dataset获得一个新的图形节点,并且TDB数据库文件夹的磁盘大小增大,这似乎再次工作。

当我试图从dataset中删除一个命名图时,这里出现了这个问题。使用dataset的removeNamedName("graphName")方法,我从dataset中删除模型。将来对该模型名称的查询显示它已经成功地被删除了。但是,即使在同步和退出之后,TDB数据库文件夹的磁盘大小仍然相同。

起初,我认为数据库可能只是将已删除的文件空间标记为空闲的,以便在新数据进入时可以覆盖它,但情况似乎并非如此。如果我删除一个命名图并在同一程序运行后立即替换它,文件夹似乎不会增长,但是如果我添加一个新的命名图并在相同的运行中删除它,文件夹的大小会变大,模型的删除不会释放内存,这意味着在运行几次之后,数据库文件夹的大小是原始大小的五到十倍,而不包含任何数据。

任何见解或帮助都会很好,再次感谢。

EN

回答 1

Stack Overflow用户

发布于 2012-06-18 23:03:41

通过询问耶拿邮件列表(users@jena.apache.org),您可能会获得更多的洞察力,但我将尝试回答。您也可以看看网站上的TDB体系结构页面。

TDB通过构建一个节点表来存储数据,该表将RDF节点映射为64位整数it,反之亦然。然后,它使用这些整数It构建单独的索引,从而允许它执行回答SPARQL查询所需的各种数据库扫描。

添加数据可能会向这两种结构(节点表和索引)添加条目,但删除数据只会从索引中删除数据。因此,随着时间的推移,节点表将继续增长,即使您删除了旧数据,因为它没有从节点表中删除。

这背后的实际原因有两个:

  1. 整数ID部分编码文件偏移,因此ID到节点查找是一个快速文件扫描,因此,随着数据被删除,您不能删除节点表的一部分,而不必重写所有节点ID,即ID ->节点方向上的节点表是一个顺序文件(有助于非常快地插入)。
  2. 当数据被删除时,您不知道某个节点是否被多次使用而不执行完整的数据库扫描。因此,您无法判断节点表条目是否应该首先删除。要做到这一点,唯一可行的方法是实施一个完整的引用计数方案,它本身将增加系统的复杂性,并减缓添加和删除。

免责声明--我是Jena项目的提交人,但是从来没有就TDB组件做过任何个人工作,所以这反映了我最好的理解,而且可能不是完全准确的。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11088082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档