在 Apache Jena Fuseki 中压缩数据集

Posted

技术标签:

【中文标题】在 Apache Jena Fuseki 中压缩数据集【英文标题】:Compacting a dataset in Apache Jena Fuseki 【发布时间】:2020-06-15 11:44:36 【问题描述】:

大家好,RDF 爱好者。

我已将 Jena Fuseki 服务器部署为端点,以收集来自云服务基础架构的大量事件数据,然后将数据集用作服务监控前端的最终知识来源。但是数据集增长得非常快。

我了解到有一种方法可以压缩 TDB2 数据集。我如何在 Fuseki 环境中做到这一点?

【问题讨论】:

目前必须关闭服务器,然后运行tdb.tdbcompact然后重启服务器。 啊,这是我一直害怕的事情。 :-/ 谢谢。 【参考方案1】:

显然没有办法在 Fuseki 环境中进行在线压缩。但我发现,tdb.tdbcompact 命令对数据库的压缩都不够,因为在我的情况下,差异大约是数据库大小的 2-4%。

我所做的是转储整个数据集,清除数据库并再次加载数据集。结果令人难以置信:从 50 GiB 的数据库降至 1 GiB。

我计划每天进行此操作并同时进行备份。

【讨论】:

【参考方案2】:

这可以通过 TDB2 后端实现。

根据the docs,您可以运行tdb2.tdbcompact。它运行的代码是here,这表明它会阻止写入器(而不是读取器)并创建一个新的Data-000X(递增X)目录,然后在压缩完成后切换为实时数据库。

【讨论】:

是的,这是可能的。但不是直接来自 Fuseki 环境。【参考方案3】:

截至 2020 年 11 月 25 日发布的 Jena 3.17.0,Fuseki HTTP Administration Protocol 中有一个 /$/compact/name 端点,并提供更多详细信息 here。

注意:在压缩过程中读取请求会继续,但写入会一直保持到完成为止。 旧的数据目录,例如。 Data-0001,保留,但可以在压缩完成后删除以节省存储空间。 作为大小和时间的参考,仅通过 POST 到 fuseki 创建的 55G 数据库在 MacBook Pro 2019 (SSD) 上在约 20m 内压缩到 6.8G。

【讨论】:

以上是关于在 Apache Jena Fuseki 中压缩数据集的主要内容,如果未能解决你的问题,请参考以下文章

Jena Fuseki 服务器命令未找到

Jena+fuseki

如何使用Apache Jena获得“选择计数(*)”查询的结果?

java 使用Apache Jena的API(不是RESTful API)从RDF数据构建数据库并回答Java中的SPARQL查询

无法更改 Apache Jena 日志记录级别(使用 log4J2)

Fuseki 服务器不显示数据集