4个版本
0.3.0 | 2024年6月3日 |
---|---|
0.2.11 | 2024年1月26日 |
0.2.10 | 2023年12月12日 |
0.2.8 |
|
0.0.6 |
|
#22 in HTTP服务器
每月183次下载
95KB
763 行
包含 (WOFF字体,51KB) fonts/roboto300.woff2
RickView
使用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
支持,请创建一个包含动机的问题,我可能会实现它。
我如何将它与大型知识库一起使用?
- 使用hdt-cpp将您的数据转换为默认的HDT格式。
- 通过在
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一模一样?
- LodView看起来很漂亮,工作得也很好,唯一的问题是性能和一定程度上的简单容器化部署。
- LodView采用MIT许可,这是允许的。LodView版权所有(c) 2014 Diego Valerio Camarda和Alessandro Antonuccio。
- 我可以将我有限的时间集中在编程上,而不是设计决策上。其他设计可能会稍后出现。
- LodView的用户可以无缝切换。
- 当界面非常相似时,性能比较更容易。
社区指南
问题和支持
如果您遇到软件问题,想报告一个错误或有功能请求,请使用问题跟踪器。如果您有不同类型的请求,请随时发送电子邮件至Konrad。
引用
目前还没有关于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