现在想要解决的问题:
按天、时、周、月对数据做汇总统计,现在的分表模式对于业务还是不太够,当用户需要对前端展示出来的数据做一些动态修改时,难以在切换统计单位时展示出来。
希望能找一些分表方式,以及统计数据修改的方式。
到目前的流程:
最开始仅有a表(统计数据表)
id 数据id; projectId 项目id; time 统计日期(yyyy-MM-dd HH:mm:ss); action 动作名称(如浏览、分享); userAgent 用户来源(如微博、微信、pc); commonUserId 用户id(如:ip);
访客数通过 COUNT(DISTINCT COMMONUSER_ID) _visitor统计的访客数,但数据量一大,查询速度就变得超级慢了,之后开始考虑分表,现在暂时建了个b表(汇总表)
id 数据id; action 动作名称(如浏览、分享); dataNum 数据总计; projectId 项目id; dataTime 统计日期(yyyy-MM-dd); createtime 创建时间;
现在仅把每天的汇总了下,若不考虑假数据,按小时汇总的也可以用类似的方式,但考虑到日后需要动态修改一些展示的数据时(又必须保留数据库中的原始数据),就需要考虑修改数据后这几个统计单位各个统计量总数的统一,以及修改数据的方式,就比较麻烦,不清楚该怎么做更好些了。对于修改数据这块,目前想到的是一种是对数据加某个值,一种是对数据进行百分比添加,但若修改基数据,容易造成最终总数据的不一致,这样就比较纠结了。
mysql 訪問者数などのデータをカウントおよび最適化する際に注意すべき点は何ですか? -PHP中国語サイトQ&A-mysql 訪問者数などの統計や最適化で注意すべきことは何ですか? -PHP中国語サイトQ&A
ぜひ見て学んでください。
第一种方案,冗余时、天、周、月、年字段,分别和用户id建组合索引,这样千万级数据用distinct 查个uv还是很快的。然后按各个冗余字段建汇总表,最后走上数据仓库的道路。
第二种方案是使用分布式的数据库。