请教大家一个计数器的问题,想了 2 周了,目前没有完美的方案

2018-05-20 20:51:04 +08:00
 mistergo

我们公司大概有几千个 App,每个 App 在每次在手机上启动时,都会向服务器上报当前设备的 deviceID 和 AppID。目前,服务端这边,有两个需求:

  1. 想要知道任意一个 App,一共有多少台设备安装过;
  2. 对于任意 App,拿到任意 deviceID 后,要快速知道之前有没有安装过。

目前的几个思路:

  1. 把所有设备 ID 存储到数据库,但是这样数据库行数会非常多,后期查询起来可能会慢。
  2. 如果用 redis 之类的,担心存不下
  3. 如果用 elasticsearch,聚合+统计的操作,也会比较慢

请教各位大神,有没有其他好方案?

3133 次点击
所在节点    问与答
23 条回复
woscaizi
2018-05-20 21:15:24 +08:00
Mysql 就可以吧,数据没到亿级吧。
Mutoo
2018-05-20 21:37:41 +08:00
2 用布隆过滤器可解
a132811
2018-05-20 22:47:54 +08:00
2. 用 bloomFilter 要考虑错误率容忍问题。错误率不能容忍,就 redis hash。redis 内存占用在你担心前应该压测一下。真是内存不够》加内存或者服务器。要压榨内存,就自己用 mmap 实现 hash: https://www.jianshu.com/p/3fe88953e9f9
1. 就基于 2 计数就行了
dapang1221
2018-05-20 23:19:20 +08:00
splunk,一点也不慢
glues
2018-05-21 00:00:06 +08:00
mysql 完全没问题
jssyxzy
2018-05-21 03:01:10 +08:00
1 个 条记录 10 字节的话, 1g 可以存一亿条记录
一张 hash 表应该够,
而且觉得一起太多, 可以根据 appid 进行切割
ctsed
2018-05-21 03:29:20 +08:00
es 不慢啊,好好改改 mapping,个位数毫秒级响应
huiyifyj
2018-05-21 08:05:06 +08:00
看标题还以为是与数字逻辑电路有关,emm,打扰了。
murmur
2018-05-21 08:30:34 +08:00
只有我好奇开发了几千个 app 连怎么统计都不知道的是什么公司么
怕不是
lianyue
2018-05-21 08:32:49 +08:00
所有的数据库都能吧 按照 deviceID 分表,分片就好了
lianyue
2018-05-21 08:35:31 +08:00
不用 count(*) 大部分数据库 亿级都是 0.0x 大概 很快的
Tokin
2018-05-21 08:37:21 +08:00
几千个 App....大公司啊,这么多 App。。。
chenuu
2018-05-21 09:28:10 +08:00
redis.
lizhenda
2018-05-21 09:33:04 +08:00
几千个马甲包?发财了啊
xiaochocking
2018-05-21 09:34:56 +08:00
几千个 app 不算大公司 算巨公司吧
yangqi
2018-05-21 09:36:26 +08:00
几千个 app, 平均每个 app 下载量多少? 也就是装机量多少?
doubleflower
2018-05-21 11:01:22 +08:00
明显是想多了,数据库装不下装机量的公司世界上还没有
imn1
2018-05-21 11:30:55 +08:00
希望不是 XX 马克丁
rrfeng
2018-05-21 11:39:12 +08:00
redis:每次存俩值

incr count:${appid} 1
set ${appid:deviceid} 1

总量算一下就知道了。 计数器可以忽略,总安装量你可以算出来。或者不知道的话就先准备 10G 看看。
10G 存个 2-3 亿没啥问题……只要你 id 不是特别特别长。
rrfeng
2018-05-21 11:40:16 +08:00
@rrfeng

如果连 10G 也没有,就用 bloom filter。

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

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

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

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

© 2021 V2EX