PRL-PRG/sxpdb

GitHub: PRL-PRG/sxpdb

sxpdb 是一个高性能的 R 语言值存储数据库,支持百万级唯一值的写入、查询与合并,专为 R 运行时数据的收集与分析场景而设计。

Stars: 3 | Forks: 0

[![R-CMD-check](https://static.pigsec.cn/wp-content/uploads/repos/cas/18/181b2c46b15699c1d364c31c2fe2aa81fc2b62b4581169584da0e915b26183c6.svg)](https://github.com/PRL-PRG/sxpdb/actions/workflows/R-CMD-check.yaml) [![codecov](https://codecov.io/gh/PRL-PRG/sxpdb/branch/main/graph/badge.svg?token=YX52PLOQ3V)](https://codecov.io/gh/PRL-PRG/sxpdb) [![r-universe](https://prl-prg.r-universe.dev/sxpdb/badges/version)](https://prl-prg.r-universe.dev/sxpdb) [![mutator](https://img.shields.io/endpoint?url=https%3A%2F%2Fprl-prg.github.io%2Fsxpdb%2Fmutation-score.json)](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, 客户端加密, 开发工具, 数据序列化, 数据库, 数据擦除