3 个版本
0.1.2 | 2024 年 8 月 8 日 |
---|---|
0.1.1 | 2024 年 8 月 8 日 |
0.1.0 | 2024 年 8 月 8 日 |
112 在 命令行工具
284 每月下载次数
50KB
1K SLoC
WALL•A
此 wall-a
CLI 工具旨在在 Git 仓库的上下文中支持将数据写入二进制格式。
动机
我的最初想法是将基准/分析数据写入 Git 仓库,并以不会对 Git 产生问题的格式(主要是)存储。
我想每提交一条数据,然后想找到一种方式来获取聚合数据,以便我可以可视化或其他方式使用基准数据。
设计
该工具有两个命令
append
- 此命令将从 STDIN 读取 JSON 数据并将其附加到指定 "data" 目录中的临时文件。如果临时文件变得过大,则读取临时文件的内容,将其合并,并以二进制格式(CBOR)将其写入新的 "archive" 文件。归档文件名中包含时间戳,因此它按照所有以前的归档文件进行排序。read
- 此命令按文件名顺序读取所有归档文件,合并其中包含的值,然后读取和合并临时文件中的值。然后,它将最终值写入标准输出。
需要注意的是,append
写入的 JSON 数据在 read
时与所有以前的数据合并。合并函数的工作方式如下
- 对于一对JSON对象,它会递归合并常见的键,对于不常见的键,它只取值。例如,合并以下两个JSON对象:
- 对于一对JSON数组,它会将新值连接到旧值之后。例如,合并以下两个JSON数组:
- 对于所有其他组合,它总是取最新的JSON值
设计灵感来源于https://simonwillison.net/2020/Oct/9/git-scraping/,我希望git diff
适用于最新数据。然而,我不想有一个无限增长的巨大JSONL文件,因此作为妥协,我加入了“存档”文件的概念。
“存档”文件只是暂存文件数据的快照,转换为二进制格式。这个二进制文件可以比暂存文件小得多,读取速度也快得多。缺点是,这个文件是二进制的,并且与git交互不好。存档文件只写入一次,以减少git需要在历史中存储的文件副本数量。
暂存文件只是一个换行符分隔的JSON文件(JSONL)。这种格式非常适合git diff
,因为你可以轻松地看到新添加的数据以及转移到存档文件中的数据。
依赖关系
~16MB
~266K SLoC