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