咨询个 SQL 数据去重的问题

13 天前
 kkbear
目前有个流水表,大几千万的数据,可以简化如下:
会员号( member_id), 流水日期( trans_date)

有个需求,需要找出指定日期段内的会员数量(去重)
这个日期段时灵活的,可能时本月,本周,最近 7 天,最近 30 天

有什么方法能优化
1. 没办法根据日期段做汇总结果的统计表,因为日期段没有任何规律
2. 数据库为 mysql,目前用的 sum(distinct member_id) where trans_date between
2587 次点击
所在节点    MySQL
29 条回复
ZGame
13 天前
你这就一个表 直接推到 es 里查就很快了吧....
ZGame
13 天前
1.先搞个从库,然后查询。
2.如果查询速度不满足效率,先加索引,数据库层面的优化
3.如果还是不行,把数据同步到 es 或者其他 mpp 并查询。
hero1874
13 天前
搞 OLAP 数据库吧 StarRocks Doris ClickHouse 都行,不过 ck 运维很麻烦。。
StarRocks Doris 可以用 catalog ,直接取到 mysql 的数据,然后再计算也还不错
cnbatch
13 天前
简单粗暴的解决办法

建个新的表(以下称之为“日期表”),只需两个 column:
timestamp 、会员号(member_id)

然后把流水表的数据逐条拆分写入这个“日期表”,顺便修改下原程序的代码,更新流水表的同时也要写入“日期表”
chainal7777
13 天前
按天出汇总啊,楼上说 olap 的,我感觉还不如 mysql 呢
Biggoldfish
13 天前
这种量级的数据和简单的需求,任何正常的 OLAP db 都是闭眼出结果吧
srlp
13 天前
直接 doris 闭眼出。

面试的话,构建 memberid-活跃日期 bitmap 表
loveaeen
13 天前
增加中间件也就增加了额外维护成本,按楼上说的。每日汇总数据数量,日期段只查汇总表也挺好的。
oaix
12 天前
如果不用追求 100%准确,并且时间段最小粒度是天。可以每天算一个 hyperloglog ,存起来。查询的时候把对应日期的 hyperloglog 合并起来。

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

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

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

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

© 2021 V2EX