求技术方案: mysql 存有 10 亿条不相同的手机号哈希值,现已知可能存在个别几条相同,如何找出

2023-05-09 06:16:21 +08:00
 lzz2394677796
求技术方案:mysql 存有 10 亿条不相同的手机号哈希值,现已知可能存在个别几条相同,如何找出

group by count 大于 1 ?
2224 次点击
所在节点    问与答
28 条回复
sadfQED2
2023-05-09 10:10:45 +08:00
你是需要实时计算还是仅仅需要找出来?如果只是为了找出胀数据,那直接去从库执行 select x,count(1) from table group by x having count(1)>1 不就完事了。

如果你需要线上业务实时计算的话,那就上实时计算引擎,比如楼上说的 clickhouse ,或者 starrocks 之类的。你这样业务,实时计算引擎能够几百毫秒出结果
amon
2023-05-09 10:24:11 +08:00
如果只为了找出来,group by having 即可。
如果是为了面试,请将你知道的所有技术名词试着用通顺的逻辑组合在一起即可。
mmuggle
2023-05-09 10:35:43 +08:00
bitmap
sujin190
2023-05-09 10:52:13 +08:00
@sadfQED2 #21
@amon #22 不要忽略数据量的问题,之前搞过这种查询方便就把大量数据合并到一个表,数据文件数百 G ,内存 16G ,然后查询的时候发现 mysql 读磁盘才 10M 不到,加上查询过程中临时文件的 IO ,扔一个 sql 进去跑几个小时啥结果没有。。
swulling
2023-05-09 11:06:10 +08:00
dump 出来用 awk 一行就搞定了。时间复杂度是 O ( 1 )。不用 awk 随便找个语言用 HashMap 就行了。

用 sort 的不知道是咋想的。
JKeita
2023-05-09 11:09:27 +08:00
用 bitmap
Chad0000
2023-05-09 11:23:21 +08:00
如果只是偶尔需要排查的话,那么可以将 50 亿数据分组,比如按前两位字母。这样每次只算一组,直接在内存中计算,不需要那么大内存。
lzz2394677796
2023-05-09 11:59:04 +08:00
不是面试。索引后总数据库文件约 300G 。

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

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

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

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

© 2021 V2EX