磁盘空间不足的情况下, 10 亿级数据库该如何去重?

2022-07-12 17:35:53 +08:00
 Sherman07
现有单表 10 亿条数据,含有大约 5000w 条重复数据,在磁盘空间严重不足(已经使用 92%)的情况下应该如何去重?
数据库采用 Oracle 云数据库,根据“UID”判断是否重复。
1689 次点击
所在节点    问与答
11 条回复
InDom
2022-07-12 17:43:16 +08:00
这不是知名面试题嘛?

用那个啥 bitmap ?

算了下需要用 1G 内存 or 磁盘?
Reficul
2022-07-12 18:49:40 +08:00
bloom filter 过滤一遍,发现重复的放 hashmap 再来一遍?
sadfQED2
2022-07-12 19:36:33 +08:00
在我这里,就算是天王老子来了,我也是提工单申请一台大磁盘服务器处理

不过你这个是在数据库里面,跟磁盘大小有啥关系?写脚本遍历表,每个 uid 再去数据库查一次有几条,然后删除多余的不就行了
sadfQED2
2022-07-12 19:38:17 +08:00
根据主键 id 遍历表,不会出现文件排序,只要数据库还能查数量,哪怕磁盘 100%也不影响啊
wxf666
2022-07-12 20:17:43 +08:00
@sadfQED2 会不会他 uid 没加索引。。

即使一行索引只是存为 (uid: 4 Bytes, 页号: 4 Bytes),给 uid 加索引,至少也需要 (10 ^ 9) * 8 Bytes ≈ 7.5 GB 磁盘?

感觉 1 楼说的 bitmap 去重可行啊

如果 UID 为 4 字节,bitmap 需要 (2 ^ 32) bits / 8 (bits/Byte) = 512 MB 内存 /磁盘,

如果 UID 极差不超过 2 ^ 30 (约 10 亿 7300 万),bitmap 只需要 128 MB 内存 /磁盘
rrfeng
2022-07-12 20:18:09 +08:00
我一时间没想明白这是个 dba 题目还是…
wxf666
2022-07-12 20:26:38 +08:00
上面写错了,一行索引存为 (uid: 4 Bytes, 主键 id: 4 Bytes)
Jooooooooo
2022-07-12 20:50:45 +08:00
确实, 你都能有这么多数据了, 还具备处理价值, 申请一个更大的存储不是问题.
yogogo
2022-07-12 21:28:03 +08:00
哪家大厂这么扣,10 亿级数据库都不舍得加磁盘空间
dddd1919
2022-07-12 21:56:06 +08:00
读到另一个机器上查重,然后再回来删
nepiedg
2022-07-13 08:11:28 +08:00
布隆过滤器?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/865726

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX