Heim > Fragen und Antworten > Hauptteil
场景:在MySQL数据库基础上的一个电信计费系统,10万用户,流量明细单表(号码,归属地,时间点,上网时长,上网套餐,扣费),每天插入1000万的数据,一个月有5亿数据,插入的同时,需要进行计费,如你用了100K流量扣0.01毛钱这样的更新余额操作
问题1:你怎样设计表容纳这么多数据?
问题2:你怎样做让插入和更新操作更快?
问题3:如果用户每个月需要查询一次自己的流量详单,大概从全表30亿数据(6个月的话单)中查询出500条上网流量记录,你怎么做?
我的想法
1.因为插入和更新需要捆绑在一起,所以要用innodb引擎
2.按天来使用mysql的分区表,单表存储1000万数据,数据量会不会大了点?
3.我在想为了加快插入的和更新操作,到底是否要对“号码”设置为主键呢?,是否需要在MySQL前面加redis呢?我自己计算了一下,每秒大概166个事务(写入,更新),需要优化吗?
有很多困惑的地方,谢谢大家~
代言2016-11-11 11:40:13
建议使用水平分表技术,可以以用户ID等属性来分,假如分1000张表(当然实际分多少表可以按照一定的需求来)
这样的话,每张表分到大约100个用户,每个用户每月500条基础信息计算的话,一个表一个月就有100*500=50000数据量,存储一年的数据的话,单表的数据量也就60万,一般基础数据留存3年左右的话,单表大致2000万数据量,数量级控制在千万级
当然想真正提升性能,还得先分库后再分表,分库后的麻烦就是如何保证数据的强一致性(看需求业务对数据的严苛性怎么样了)
对大量数据的处理不考虑NoSQL的话一般都是分库分表处理