#linked-data #rdf #semantic-web #知识图谱 #文件格式

app rickview

快速的RDF查看器(链接数据浏览器)

4个版本

0.3.0 2024年6月3日
0.2.11 2024年1月26日
0.2.10 2023年12月12日
0.2.8 2023年8月17日
0.0.6 2022年11月25日

#22 in HTTP服务器

Download history 1/week @ 2024-05-24 134/week @ 2024-05-31 25/week @ 2024-06-07 4/week @ 2024-06-14 6/week @ 2024-06-28 124/week @ 2024-07-05 170/week @ 2024-07-26 13/week @ 2024-08-02

每月183次下载

MIT 许可证

95KB
763

包含 (WOFF字体,51KB) fonts/roboto300.woff2

RickView

Latest Version Lint and Build Unsafe forbidden RickView @ Leipzig Semantic Web Day 2023 Video DOI

使用Rust编写的易于部署的低资源独立RDF知识图谱浏览器。无需SPARQL端点!另请参阅未发表的论文草稿。布局来自LodView

当前部署

随意浏览!

Docker

用示例知识库试用

docker run --rm -p 8080:8080 ghcr.io/konradhoeffner/rickview

Docker Compose示例

services:
  rickview:
    image: ghcr.io/konradhoeffner/rickview
    environment:
      - RICKVIEW_KB_FILE=https://raw.githubusercontent.com/hitontology/ontology/dist/all.ttl
      - RICKVIEW_NAMESPACE=http://hitontology.eu/ontology/
      - RICKVIEW_BASE=/ontology
      - RICKVIEW_TITLE=HITO
      - RICKVIEW_SUBTITLE=Health IT Ontology
      - RICKVIEW_EXAMPLES=Study SoftwareProduct ApplicationSystemTypeCatalogue
      - RICKVIEW_HOMEPAGE=https://hitontology.eu
      - RICKVIEW_ENDPOINT=https://hitontology.eu/sparql
      - RICKVIEW_GITHUB=https://github.com/hitontology/ontology
      - RICKVIEW_DOC=https://hitontology.github.io/ontology/
    ports:
      - "127.0.0.1:8080:8080"
    restart: unless-stopped

预编译的二进制文件

最新版本下载二进制文件并运行 rickview。如果您需要除Linux amd64以外的平台的二进制文件,请告知我

自行编译

或者,您可以使用 cargo install rickview 在您的平台上编译它。或者,您可以克隆仓库,然后运行 cargo build。这需要您安装Rust包括Cargo

配置

默认配置存储在 data/default.toml 中,您可以使用自定义的 data/config.toml 或环境变量进行覆盖。配置键采用小写蛇形命名法,而环境变量以 RICKVIEW_ 开头,采用大写蛇形命名法。例如,在 config.toml 中的 namespace = "http://hitontology.eu/ontology/" 等同于环境变量中的 RICKVIEW_NAMESPACE=http://hitontology.eu/ontology/。您需要提供一个以 RDF Turtle 或 HDT 格式存储的知识库,默认路径为 data/kb.ttl。如果没有提供,RickView 将显示一个最小示例知识库。您可以通过添加 data/body.html 文件来向索引页面添加自定义 HTML。您可以通过使用 css 环境变量添加嵌入式 CSS。默认情况下,使用 Roboto 字体,RickView 本地托管以提高鲁棒性、速度并防止与欧洲隐私法冲突。如果您不介意这个问题,例如,您想显示中文或日文字符,您可以导入 Google 字体。

css = "@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@300&display=swap'); body {font-family: 'Noto Sans SC', sans-serif}"

使用 cargo run 编译和运行,然后在您的浏览器中打开 https://127.0.0.1:8080

支持的文件格式

支持的格式和扩展名包括 Turtle (.ttl)、N-Triples (.nt)、HDT (.hdt),由 hdt-cpp 创建,以及 zstd 压缩的 HDT (.hdt.zst)。

日志记录

默认日志级别为 RickView 的 "info" 和库的 "error"。使用 log_level 配置键或 RICKVIEW_LOG_LEVEL 环境变量更改 RickView 的日志级别。使用 RUST_LOG 环境变量覆盖此设置以配置依赖项的日志级别,请参阅 env_logger 文档,例如

RUST_LOG=rickview=debug cargo run

动机

现有的 RDF 浏览器(如 LodView)看起来很好,但它们基于解释或垃圾回收语言,因此硬件资源使用过多。这导致在典型的小规模研究 VM 上等待时间过长和内存不足错误,这些 VM 上有数十个 docker 容器用于长期归档完成的研究项目,其结果仍应可用,以便进行可重复的科学。

目标

使用 Rust 实现一个类似于 LodView 的基本 RDF 浏览器,具有以下特性

  • 速度
  • 低资源利用率
  • 良好的设计
  • 生成静态 HTML 的选项

统计数据

所有值均已四舍五入,并在旧版 RickView 上进行测量,该 RickView 在 Intel i9-12900k(16 核心,24 线程)上运行,具有 32 GB DDR5-5200 RAM 和三星 SSD 980 Pro 1 TB,在 Arch Linux 上使用标准内核 5.18。HDT 的统计数据尚未测量,因为其 RAM 使用量较少。

  • Linux x86-64 发布的二进制文件大小(strip,fat 链接时间优化,所有功能):4.1 MB
  • Linux x86-64 发布版本二进制文件大小(去除符号表,无链接时间优化,所有功能):5.8 MB
  • Docker 镜像大小:9.7 MB
  • 发布编译时间(去除符号表,脂肪 LTO,所有功能,冷启动):52 秒
  • 发布编译时间(去除符号表,无 LTO,所有功能,冷启动):19 秒
  • RAM 使用量(FastGraph,docker stats,HITO 知识库 1.1 MB,空闲):10 MB
  • RAM 使用量(FastGraph,docker stats,HITO 知识库 1.1 MB,最大负载 30 秒):15 MB
  • RAM 使用量(LightGraph,docker stats,qbench2,1620 万个三元组,3.6 GB N-Triples 文件):2.568 GiB
  • RAM 使用量(LightGraph,qbench2,归一化):2.524 GiB
  • RAM 使用量(FastGraph,docker stats,qbench2):4.9 GB
  • 图形加载时间(FastGraph,qbench2,调试构建):548-552 秒
  • 图形加载时间(FastGraph,qbench2):47 秒
  • 图形加载时间(LightGraph,qbench2):40 秒
  • HTML 页面生成时间(LightGraph,qbench2):1.9 秒
  • HTML 页面生成时间(FastGraph,qbench2):6-58 毫秒
  • Turtle 页面生成时间(FastGraph,qbench2):6-35 毫秒

单资源吞吐量,HTML

没有页面缓存,但可能仍有内部缓存优势,因此未来应更加详细。

$ wrk -t 24 -c 24 -d 30 https://127.0.0.1:8080/SoftwareProduct -H "Accept: text/html"
Running 30s test @ https://127.0.0.1:8080/SoftwareProduct
  24 threads and 24 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     9.79ms    3.25ms  26.92ms   56.40%
    Req/Sec   102.36     36.17   212.00     66.74%
  73590 requests in 30.02s, 1.04GB read
Requests/sec:   2451.31
Transfer/sec:     35.43MB

单资源吞吐量,RDF Turtle

$ docker run --network=host -v $PWD/ontology/dist/hito.ttl:/app/data/kb.ttl  rickview
$ wrk -t 24 -c 24 -d 30 https://127.0.0.1:8080/SoftwareProduct
Running 30s test @ https://127.0.0.1:8080/SoftwareProduct
  24 threads and 24 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    13.96ms    4.74ms  37.20ms   55.04%
    Req/Sec    71.77     26.17   121.00     66.43%
  51572 requests in 30.02s, 567.72MB read
Requests/sec:   1717.72
Transfer/sec:     18.91MB

LodView 统计信息

为了比较,以下是 LodView RDF 浏览器(用 Java 和 Swing 编写)的统计信息。

  • war 文件:21 MB(RickView 体积的两倍)
  • Docker 镜像大小:246 MB(RickView 体积的 25 倍)
  • 编译和打包时间:12 秒(所有优化下,编译速度比 RickView 快 4 倍)
  • RAM 使用量(docker stats,HITO 知识库 1.1 MB,空闲,不包括 Virtuoso):482 MB(内存使用量是 48 倍)
  • RAM 使用量(docker stats,HITO 知识库 1.1 MB,最大负载 30 秒,不包括 Virtuoso):790 MB(53 倍)
  • RAM 使用量(docker stats,HITO 知识库 1.1 MB,空闲,包括 Virtuoso):655 MB(65 倍)

单资源吞吐量

由于数据通过 JavaScript 在页面加载后加载,实际性能可能更差。

$ wrk -t 24 -c 24 -d 30 https://127.0.0.1:8104/ontology/SoftwareProduct
Running 30s test @ https://127.0.0.1:8104/ontology/SoftwareProduct
  24 threads and 24 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     1.97ms    2.40ms  44.84ms   88.08%
    Req/Sec   713.62    353.46     1.24k    38.76%
511567 requests in 30.03s, 1.61GB read
  Socket errors: connect 0, read 1, write 0, timeout 0
  Non-2xx or 3xx responses: 511567
Requests/sec:  17037.90
Transfer/sec:     55.07MB

LodView 无法处理 24 个线程和 24 个连接,因此请尝试使用单个线程和单个连接。

$ wrk -t 1 -c 1 -d 30 https://127.0.0.1:8104/ontology/SoftwareProduct
Running 30s test @ https://127.0.0.1:8104/ontology/SoftwareProduct
  1 threads and 1 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     2.90ms   13.30ms 250.66ms   97.34%
    Req/Sec   715.41    251.08     1.48k    69.46%
  21227 requests in 30.01s, 68.61MB read
  Non-2xx or 3xx responses: 21227
Requests/sec:    707.24
Transfer/sec:      2.29MB

即使是单个线程和单个连接也会导致容器报告错误,这将在未来进行调查。

常见问题解答

为什么需要 RickView?性能不重要,RAM 成本几乎为零!

根据 Hitzler 2021 的说法,由于缺乏免费、高效、可访问、健壮和可适应的工具,语义网领域的广泛应用已经停滞。相反,有限期限的研究资助促使无数研究原型的出现,这些原型不符合任何这些标准,项目结束后也不会维护,最终在拥挤的服务器上竞争资源,如果它们没有完全崩溃。

你能实现功能 X 吗?

我非常感兴趣地听取您在使用它时对知识库的看法,并愿意帮助您设置它。欢迎功能和建议,但 RickView 的目标是保持简约,而不是满足每一个用例。请考虑填写调查问卷,这样我可以了解哪些功能最受欢迎。

为什么没有 .env 支持?

我认为这可能是过度的,因为已经存在默认配置文件、自定义配置文件、环境变量,以及Docker Compose自带对.env的支持。所以我的假设是,您使用配置文件进行本地开发,以及使用.env与Docker Compose。但是,如果您需要在Docker Compose之外使用.env支持,请创建一个包含动机的问题,我可能会实现它。

我如何将它与大型知识库一起使用?

  1. 使用hdt-cpp将您的数据转换为默认的HDT格式。
  2. 通过在data/config.toml中设置large = true或设置环境变量RICKVIEW_LARGE=true来禁用标题和类型索引。

没有索引,RickView的内存使用量仅比底层HDT Sophia适配器的内存图高出几MB。见基准测试。例如,RickView在http://linkedspending.aksw.org/上使用约2.6GB RAM,包含LinkedSpending 2015,未压缩的N-Triples为30GB,压缩的HDT为413MB。

何时使用压缩以及为什么不支持其他压缩格式?

HDT是一种压缩的二进制格式,仍然支持快速查询。它可以进一步压缩,但这样RickView需要在加载之前解压缩,在一个大型知识库的测试中,这增加了加载时间从约15秒到约17秒。由于解压缩是在流模式下进行的,这限制了可用的压缩器,并且如果您使用像HDD这样的慢速驱动器和快速的CPU,这甚至可能导致更快的加载。zstd被选择,因为它以高比率压缩和解压缩速度快,支持流,并且对RickView二进制文件的额外开销很小。Brotli在高压缩设置下压缩非常慢,而GZip会导致文件大小更大。如果您需要支持其他流压缩器,请创建一个问题

为什么它看起来和LodView一模一样?

  1. LodView看起来很漂亮,工作得也很好,唯一的问题是性能和一定程度上的简单容器化部署。
  2. LodView采用MIT许可,这是允许的。LodView版权所有(c) 2014 Diego Valerio Camarda和Alessandro Antonuccio。
  3. 我可以将我有限的时间集中在编程上,而不是设计决策上。其他设计可能会稍后出现。
  4. LodView的用户可以无缝切换。
  5. 当界面非常相似时,性能比较更容易。

社区指南

问题和支持

如果您遇到软件问题,想报告一个错误或有功能请求,请使用问题跟踪器。如果您有不同类型的请求,请随时发送电子邮件至Konrad

引用

DOI

目前还没有关于RickView的出版物,所以请现在引用我们的Zenodo存档。

BibTeX条目

@software{rickview,
  author       = {Konrad H{\'o}ffner},
  title        = {{R}ick{V}iew: {L}ightweight Standalone Knowledge Graph Browsing Powered by {R}ust},
  year         = 2023,
  publisher    = {Zenodo},
  version      = {x.y.z},
  doi          = {10.5281/zenodo.8290117},
  url          = {https://doi.org/10.5281/zenodo.8290117}
}

引用字符串

Konrad Höffner (2023). RickView: 轻量级独立知识图谱浏览,由Rust驱动。 https://doi.org/10.5281/zenodo.8290117

贡献

我们很高兴收到拉取请求。请在提交前使用 cargo +nightly fmt 确保代码可以在最新的稳定版和夜间构建工具链上编译,并使用默认功能。在 cargo run 后浏览默认知识库,并验证没有出现错误。 cargo clippy 应不报告任何警告。您也可以通过推荐 RickView 和 分享您的 RickView 部署 来做出贡献。

依赖关系

~25–37MB
~670K SLoC