背景
这些超大的 JSON 文件来自 Cuckoo Sandbox 的 report ,主要内容是一系列的系统 API 调用,包含 API 名称和参数。这些 JSON 文件大小一般在几十~几百 MB 之间。
需求
- 将这些 API 调用做一个 distinct 操作,也就是找出每个文件里包含了哪几种 API
- 判断一个 API 是否在某个 API 调用序列里
我的尝试
- 简单粗暴:用 Python 直接 json.load ,然后逐项将 API 名称添加到 set 里,实现去重的效果。这种做法的问题是超级占内存
- ijson :为了解决 json.load 带来的内存占用问题,尝试使用了 ijson ,它可以以流的方式读取 JSON ,这样内存占用虽然下来了,但是速度真的不快
- mongodb :也尝试了将一些比较小的 JSON 直接放到 mongodb 里面,这样一个 distinct 操作就能直接得到我要的结果,非常方便,后面即使添加需求也很容易操作。但是这样做有个问题,对于比较大的 JSON(>16MB),没办法放到 mongodb 里。
文件示例
一份55MB左右的JSON 链接: http://pan.baidu.com/s/1eRZevq6 密码: 2h95
求教
请问这种场景下有没有一个比较好的解决方案可以实现上面的需求?