社区讨论LinuxDo 最新
使用mysql规划建表的时候遇到了问题,想请教一下各位佬
如题,我是新入职的开发小卡拉米,公司库用的mysql。 目前有一个建表要求;比如我现在有产品表,资金表,用户表这三张基础表,现在有一个需求是我需要能对每个用户做画像、风控; 比如我现在想对某个产品某天购买总数超过10台的用户做风控,那么一个简单的想法是直接sql去三张表里面查每个用户的逐笔数据;但是如果用户比较多,每次去直接查表就比较麻烦了;所以我的想法是根据基础的三张表添加三分不同的汇总表,比如按天汇总数据,这样可以加速查询,比如还是按照上面的需求,直接查汇总表,数据库的压力会小很多; 这里场景当然比较简单,假…
内容摘要
作者:#saysaySEE
板块:#开发调优
如题,我是新入职的开发小卡拉米,公司库用的mysql。
目前有一个建表要求;比如我现在有产品表,资金表,用户表这三张基础表,现在有一个需求是我需要能对每个用户做画像、风控;
比如我现在想对某个产品某天购买总数超过10台的用户做风控,那么一个简单的想法是直接sql去三张表里面查每个用户的逐笔数据;但是如果用户比较多,每次去直接查表就比较麻烦了;所以我的想法是根据基础的三张表添加三分不同的汇总表,比如按天汇总数据,这样可以加速查询,比如还是按照上面的需求,直接查汇总表,数据库的压力会小很多;
这里场景当然比较简单,假设已经能满足我们业务上大部分的需求了,但是还有一些风控指标,比如是讨论买某个用户某天买水果18的数量超过100台需要判定为异常购买情况,这种比较离谱的风控指标我们不可能直接对每个用户扩展表字段,那样会变成大宽表,最主要的是这个指标有可能只是暂时比较重要,长远来看可能并不需要沉淀到表里(当然也有可能需要沉淀),当然直接用sql也不现实,因为我们需要考虑到这种风控指标有可能需要作为新字段沉淀下来;
这里就面临灵活性的窘境;我看公司中台有的人使用EAV 竖形表存储临时指标,类似下面这样
tag表
client_id tag value
123 买水果18的数量 xxxx
cal表
tag_id cal_sql
xxxx select count(*) from aaa where total > 18
这样每次一个临时指标作为tag, 存储的就是所有数量的用户,value就是sql返回的值;短期可以这样,只不过每次有一个新的tag都需要存储所有用户对应的tag,就是将大宽表变成大长表;但是长期来看,数据量增加就会非常快速;我问了ai好像clickhouse可以解决类似的问题,但是还是想问问各位佬友有没有什么优雅的方式
资讯来源
LinuxDo