如何在 1s 内统计出 13 亿人口数据找出使用人数最多的十个姓名

2021-01-25 10:32:21 +08:00
 cage111

请教下各位大佬这种需求可以实现吗

13596 次点击
所在节点    数据库
104 条回复
czfy
2021-01-25 10:34:55 +08:00
不限成本(人力、资金、时间),理论上没什么不可实现的
但现实里不可能不限成本
kaiki
2021-01-25 10:37:52 +08:00
预备统计数据直接查询那根本要不了 1s,没数据那估计不行。
iceecream
2021-01-25 10:38:51 +08:00
这种几乎静态的数据,为什么有 1s 这种近乎实时的需求?
我只想到 elasticsearch 这个方法。
dqzcwxb
2021-01-25 10:40:20 +08:00
统计分三种:入库统计,实时统计,定时统计
tiancaixiaoshuai
2021-01-25 10:46:26 +08:00
kevinyyyy
2021-01-25 10:47:21 +08:00
用 druid 试试?入库时以姓名为维度,TopN 问题,不过这个意义何在呢。。。离线跑 MR 是不是更节省资源一些
rodrick
2021-01-25 10:50:04 +08:00
张伟”“王伟”“李娜”“王芳”
JJstyle
2021-01-25 10:52:07 +08:00
redis 我看他的 qps 也很难达到这么高,常规方案恐怕不行
shoaly
2021-01-25 10:52:21 +08:00
假设 百家姓里面就 100 个姓,
1 每个姓准备一个数据库, 把 13 亿个名字都存进去
2 数据库的 server 提供一个接口 ( http 的都行), 随时输出 当前记录的行数
3 写一个 100 线程或者 进程或者 协程的程序, 同时抓 100 个库里面的数字
4 轻轻松松一个排序...
以上应该 1 之内 就完成了, 且没有什么性能瓶颈, 还是 实时数据
cage111
2021-01-25 10:53:31 +08:00
补充下硬件和需求:
可以给两台 128G 内存,1TSSD 服务器
需求类似这种,
1.查找 20-30 岁使用人数最多的十个姓名
2.查找南方地区和北方地区使用人数最多的十个姓名
3.查找不同性别使用人数最多的十个姓名
还用很多类似条件随意检索
czfy
2021-01-25 10:57:21 +08:00
@cage111
1. 你的补充放到主贴的附言,才能让跟多人看到
2. 我先假设你真的有所有人口的姓名数据+人口统计学信息,这种情况下,最容易想到的就是用 ES
leeg810312
2021-01-25 11:01:17 +08:00
这种静态分析需求为什么要实时查询
kevinyyyy
2021-01-25 11:02:52 +08:00
@czfy
ES 如果要排序的话,需要所有分辨排序聚合,这个量级 1 秒搞不定吧
mapoor
2021-01-25 11:03:58 +08:00
@shoaly 大概有 2 万多个姓,而且是分布极度不均匀的,每个姓准备一个数据库不可行。
czfy
2021-01-25 11:04:37 +08:00
@kevinyyyy 其实 1 秒是搞不定的,只是它提的这种查询类型,我最先想到 ES,不一定是最优解
mapoor
2021-01-25 11:09:24 +08:00
MySQL 单库 130 张表,并行统计 TOP10,最后归并排序取 TOP10.
dongtingyue
2021-01-25 11:11:30 +08:00
预估不行,mysql 亿级的 count group by 1s 不可能。es 的分组统计 1s 也不行,放宽点 10s 可以。
cage111
2021-01-25 11:11:57 +08:00
@mapoor 还得分页
xiaoyang7545
2021-01-25 11:17:32 +08:00
可以预处理数据?
cage111
2021-01-25 11:23:00 +08:00
@xiaoyang7545 可以

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

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

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

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

© 2021 V2EX