当前业务场景是这样:已有一组 hash 值,大概 5 亿条,我希望找到一种存储结构或者工具能够实现,再来一组 hash 值的时候,能够快速的过滤掉已经存在的数据,因为所有新增的 hash 值我都要用程序处理一遍。每次新增一组大概 1 亿级别左右。程序处理完后,再导入到设计好的结构中。硬件标准为; cpu 6700k ,硬盘 STAT3 接口固态存储,内存 16g 。如果对内存要求较高,还可以再加 16g 。
目前我处理的方式是这样的,按照 hash 值首字母分 26 个文件,当前已有 10 亿条数据,每个文件大概 1g 左右,在去重时,先对新增的数据分文件,然后再分别读取对应两个文件数据,用的是 java Set 去重后保存。不过我发现当旧数据文件达到 3g 以上时,大概 1.2 亿条,这种方式就相当慢,时间并不是随着文件大小线性增加,好像有个阈值,超过了就非常慢。暂时这个值是多少没去测试。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.