开发者社区> 问答> 正文

使用MySQL储存用户历史数据

使用MySQL储存用户数据。目前想增加一个功能:显示用户在过去7天的服务器使用量。目前,数据库中和该功能相关的Columns有两个:

usedTraffic (int) 储存用户已经使用服务量。
allTraffic (int) 储存用户能够使用的服务量上限。
后端会定时更新所有用户的usedTraffic,其字段储存的是用户已使用服务量的总量。

为了实现期望的功能,我目前的想法是:
1.新建一个表,其中一个Column储存用户ID
2.其余7个Columns对应用户过去7天每天的使用量。
3.后端定时更新7个储存数据的Columns。

这样做的问题有:
1.Columns会随时间出现对应的问题:如用户在星期1注册,后端就需要从第一个Column开始读取;如果用户在星期4注册,就要从第四个Column开始读取。
2.数据冗余。目前的站点用户注册量还不算大,但这样设计会出现大量的冗余数据。

展开
收起
蛮大人123 2016-02-08 11:55:01 3442 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    你的方案扩展性不强,包括横向扩展和纵向扩展。横向扩展已经有同学说的,如果要改成30天就跪了,纵向扩展是如果你要增加一个用户属性呢?比如假设要考虑用户的性别,年龄,喜好,使用服务器时间等。
    采用一个表单独记录的方案对大数据量的支持也不够好。一个表的记录数是有限的,现在是7天的数据可能不多,要是未来要做一个月,一年的呢?查询会非常慢。
    解决方案:分区表。按照时间分区,一天一个表,每一个表中记录当天用户使用的记录。用脚本控制删除或者打包保存失效的表。每天创建新的表写当天数据进去。类似于服务器日志文件的处理方式。
    这种方案扩展性比较好,而且非常适合分布式处理,如MapReduce。数据量大的时候非常合理,而用户行为数据就是典型的大数据场景。Mysql并不是很适合做这种应用,可以参考Hive,或者阿里云的ODPS

    2019-07-17 18:39:33
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像