
1 alalida Feb 4, 2020 via Android 你先想一想目标时间复杂度和空间复杂度。去重意味要查找,那最好也就对数时间复杂度。此外要看能否分批处理,数据有无规律。可以分批处理也会快很多。总之要先看数据长什么样。 |
2 otakustay Feb 4, 2020 数据是 35G,其中 id 部分有多大?不大的话哈希应该是有办法建起来的…… |
3 shuangyeying Feb 4, 2020 是裤子么? |
4 opengps Feb 4, 2020 去重字段仅仅是 id 字段?还是全字段匹配? |
5 malusama Feb 4, 2020 bloomfilter 有误差率 |
6 yylxbiubiu OP @opengps 每个 id 字段标识这条数据 |
7 yylxbiubiu OP @shuangyeying 不是的,亲 |
8 yylxbiubiu OP @alalida 在用分片,时间换空间,但很慢,每次 10w 条 |
9 yylxbiubiu OP @malusama 有空间限制的 |
10 yylxbiubiu OP @alalida 经过分析,每条数据里边的 id 唯一标识这条数据 |
11 wysnylc Feb 4, 2020 via Android 把 id 提出来,还能有 35g ? |
12 ho121 Feb 4, 2020 via Android 对每条数据 hash 后存到哈希表或者二叉树中。 hash 算法也不需要碰撞率很低的那种,比如 crc32,crc64 这种简单的就行,这样可以加快 hash 速度,并减少内存使用。当碰到 hash 相同的,需要做完全匹配来判断数据是否真的是相等。 哈希表或者二叉树每个节点要存下每个 hash 对应的 id (可能有多个)。 数据用流式读取,或者扔进数据库中。 手机码字,有点乱 |
13 grimpil Feb 4, 2020 via Android 还以为是 35 克数据 |
14 yylxbiubiu OP @grimpil 哈哈哈哈哈哈 |
15 keepeye Feb 4, 2020 遍历所有数据,id 字段走布隆过滤器去重 用不了多少内存 |
16 mxT52CRuqR6o5 Feb 4, 2020 via Android Bitmap |
17 binux Feb 4, 2020 如果数据>>id,拿 id 出来随便爱怎么搞怎么搞 如果数据就是 id,每 7g 分片排序再 merge 排序。 |
18 zengguibo Feb 4, 2020 如果只是文本数据,压缩一下传到性能强内存大的机器上,直接导入内存去重 |
19 Tlvncks Feb 4, 2020 引用;@grimpil #13 还以为是 35 克数据 ------------------------------------------------------- 我也看了半天,还在想 35g 啥玩意?难道想提纯?? |
20 Rekkles Feb 4, 2020 数据 hash 然后对比去重? 有个笨一点的办法,数据导入 db 做唯一索引 一条一条导入,导入失败的就是重复的,牺牲时间换空间。 |
21 coolcfan Feb 4, 2020 via Android 跟 13 楼一样,看到是小写第一反应是 35 克数据…… |
22 suotm Feb 4, 2020 取 3.5G 做好去重的脚本,然后开一个 64GB 内存的云主机跑 |
23 lululau Feb 4, 2020 via iPhone 35g? 用什么称的? |
24 hhhsuan Feb 4, 2020 via Android 大小写很重要啊 |
25 netnr Feb 4, 2020 直接执行开窗函数按 id 分组排序取大于 1 的项并删除,难道顶不住? |
26 ofblyt Feb 4, 2020 最近做饭做的,看到 35g 还想 35 克去重( zhong )是给什么去皮吗 |
27 yufeng0681 Feb 4, 2020 根据 id 第一位进行文件分拣(切割到),假设有 26 个字母,10 个数字; 估计每个文件 1G 左右,那样问题就变成了 1G 文件的处理 |
28 gfreezy Feb 4, 2020 shell 里面 sort | uniq 就可以。内存不够的时候 sort 会自动交换到磁盘上。 https://unix.stackexchange.com/questions/383056/sort-huge-list-130gb-in-linux |
29 yylxbiubiu OP @lululau 电子秤吧 |
30 yylxbiubiu OP @ofblyt 姜吧 |
31 yylxbiubiu OP @gfreezy 存储有限的,都在数据库里 |
32 yylxbiubiu OP @yufeng0681 id 是纯数字,剩余的空间只有 7 个 G |
34 fuye Feb 5, 2020 via Android create table tmp(id bigint,unique key id ( id )) insert into tmp select id from 你的表 |