[英]JSON log file compaction
给定一个带有行分隔的JSON记录的文件:
{"id": 1, "position": 1234}
{"id": 2, "position": 23}
{"id": 3, "position": 43}
{"id": 1, "position": 223}
我想通过仅保留id的最后一条记录来压缩这样的文件,例如,对于上面的示例,我希望将其作为输出:
{"id": 2, "position": 23}
{"id": 3, "position": 43}
{"id": 1, "position": 223}
tldr; 是否有可与行分隔JSON一起使用的uniq
(且速度很快)?
输入文件可能包含10亿条记录,其中可能会丢弃10-20%的记录。
我尝试了各种方法:
看到的ID
在内存中保留一组“可见” ID。 这将耗尽内存。
排序和独特
首先按“ id”对文件进行排序(使用稳定的排序,因此保留了顺序)。 然后再次运行该文件,并保留最后一条记录。 这就像通常的unix sort | uniq
sort | uniq
方法。 这里的分类很昂贵,可能工作太多。
提取偏移量和长度信息
从文件中提取偏移量和长度信息以及ID,例如
id offset length 1 0 27 2 27 25 3 52 25 1 77 26
并找出哪些记录属于压缩集。 然后查找并通读文件。 此信息的提取速度相当快,但是数百万次搜索和读取以提取记录的速度使此方法变慢了。
什么是更好,更快(或最快)的方法? 是否有解决此类问题的现有工具?
此问题可以通过三步过程解决:
tac
和sort -u
仅保留相关行。 整个过程非常有效。 步骤1和2是可并行化的。 第三步可以做得很快 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.