PRL-PRG/sxpdb
GitHub: PRL-PRG/sxpdb
sxpdb 是一个高性能的 R 语言值存储数据库,支持百万级唯一值的写入、查询与合并,专为 R 运行时数据的收集与分析场景而设计。
Stars: 3 | Forks: 0
[](https://github.com/PRL-PRG/sxpdb/actions/workflows/R-CMD-check.yaml)
[](https://codecov.io/gh/PRL-PRG/sxpdb)
[](https://prl-prg.r-universe.dev/sxpdb)
[](https://github.com/PRL-PRG/sxpdb/actions/workflows/mutation-testing.yaml)
# sxpdb
存储 R 值。它以一种可扩展至数百万个唯一值的高效方式存储这些值,并提供了丰富的查询 API,以便从数据库中查找值。
```
db <- open_db("cran_db")
add_val(db, 45)
add_val(db, list(a = 34, b = c(34.5, 45), c = "test"))
add_val_origin(db, 450, "pkg", "fun", "arg1")
print(sample_val(db))
db2 <- open_db("db2")
merge_db(db, db2)
close_db(db)
close_db(db2)
```
## S3 API
```
db <- open_db("cran_db", quiet=FALSE)
add_val(db, 45)
db[0]
summary(db)
length(db)
close(db)
```
# 非 API R 入口点
为了以高性能的方式序列化并忠实地重构任意的 R 值,sxpdb 的 C++ 代码
通过几个*不*属于公开 C API 的 R 入口点读取和写入 SEXP 内部结构:`ATTRIB`、`LEVELS`、`SETLEVELS` 和 `REFCNT`。这些涵盖了
对象的属性、其 `gp`(“通用”)位,以及其引用计数,
而 R 目前没有为其公开任何受支持的等效实现。
`R CMD check` 会在“检查编译代码”(“发现对 R 的非 API 调用”)下报告此情况。
其权衡在于,R core 可能会随时更改或删除它们,
这可能需要更新 sxpdb 以保持同步。
# 贡献
请确保激活 pre-commit 钩子。我们使用 [pre-commit](https://lorenzwalthert.github.io/precommit/articles/precommit.html)
标签:C++, R语言, SOC Prime, 客户端加密, 开发工具, 数据序列化, 数据库, 数据擦除