文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>mysql亿级数据表的维护讨论

mysql亿级数据表的维护讨论

时间:2010-03-09  来源:pkman110

 Saver(792218)  14:54:40
接着昨天的面试来,请教个问题:背景:客户端记录用户机所有内存中跑的可执行程序,web网站等等,用户基数是千万数量级,每天会产生好几亿数据,这种情况下的mysql数据表如何去维护,提高其增删改查的性能呢?
Saver(792218)  14:55:01
群里的兄弟们给支支招
落落<[email protected]>  14:55:22
Saver,问你的问题 怎么都这么 变态呢

落落<[email protected]>  14:56:01
呵呵
Saver(792218)  14:57:32
赶紧给支支招
Saver(792218)  14:57:39
研究下这问题咋解决
叶金荣(4700963)  14:58:41
1. 提高可靠性
2. 提高性能
叶金荣(4700963)  14:58:46
归结为这2点
Saver(792218)  14:59:23
这个几天下来就好几亿吧,单表
Saver(792218)  14:59:43
然后需要刨去安全的,不需要关注的程序
把问题当机会(459472823)  15:00:01
日志文件、日志缓存设大点,用以减少日志的磁盘操作; 
关闭autocmmit; 
INSERT INTO tab VALUES (1,1), (2,2),... 降低客户端与服务器端的通信开销; 
加大buffer pool,插入时减少磁盘 I/O;
读写分离...
Saver 说:
  接着昨天的面试来,请教个问题:背景:客户端记录用户机所有内存中跑的可执行程序,web网站等等,用户基数是千万数量级,每天会产生好几亿数据,这种情况下的mysql数据表如何去维护,提高其增删改查的性能呢?
timothy 说:
 这时候就不光是mysql的事儿了。
 看具体需求,一定是把表分 的非常细。
横向总想 分表。
 再安需求分库。。等。
Saver 说:
 他现在是单表做
 如何去维护,呵呵
timothy 说:
 单表。。能承受这么大并发?
 应该会用到队列等东西。
Saver 说:
 人跟我讲的
说:
 问题太泛了
timothy 说:
 那要看具体需求吧??
说:
 这样很难回答的
Saver 说:
 主要是这个东挖西挖,膨胀收缩
timothy 说:
 如果是个超级简单的表儿。。
数据大 ,还要看读写 比例什么的。
Saver 说:
 还有分析,分析之后删除无用的数据
 写多读少
 删除也多
 初期快速膨胀
 中后期开始收缩
timothy 说:
 成千上万的用户同时写??
 他的mysql也太强大了。
isql 说:
 我比较关心那个每个互联网公司都在用的东东,哈哈
 到底是嘛?
 说:
 有这样的东西吗?
timothy 说:
 mysql用的都很广泛的。
 一般都会分表。。
Saver 说:
 说白了就是用户习惯系统
[email protected] 说:
 有呀,电脑,数据库,操作系统
isql 说:
 saver说的
[email protected] 说:
 就这三个吧。。。
isql 说:
 saver给解释下
Saver 说:
 就是,只要你上他的网站,用他的客户端
 那么,他就会去收集你的相关信息
timothy 说:
 http://z.xiaoi.com/r?www.sitebot.com.cn
 我们公司的站点儿。。数据量三千万 我都觉得很累了。。
Saver 说:
 不是这个玩意
 类似这个
 但是比这个收集的夸张的多
timothy 说:
 总的来说问题太泛泛了
Saver 说:
 比如说,用户当前跑的所有程序
 用浏览过的所有web页面
 用户点击过的链接
 甚至用户所有的文档
 都可以收集,分析,挖掘,然后变成资源
说:
 这些都是存放成日志,通过hadoop来分析的
 大部分公司都是用hadoop
 数据量一天可以达到几十T
Saver 说:
 那咱把这个圈子缩小点
 缩小到每个客户端内存中跑的exe程序,然后对比md5判断,哪些是未知的,然后让客户端上传分析
 这个数据量就变小了
 说:
 这个可以做到
 根据md5值来hash存放数据就行了
 表数量多一些,肯定能撑住的
Saver 说:
 这个如何维护呢,一天的数据量在1-2亿很正常
 然后后期就会越来越小
说:
 表按照两个维度去划分
 先按照时间,再按照hash
 你可以定时移走老表
 如果不想移走老表,那就hash多一些
 一亿的数据,分割成1024个表
 分布到多个服务器上
 很容易实现并行运算,存储也不是问题
 还可以加slave去增加吞吐量
Saver 说:
 这样的话跨库的查询就会需要跨库的UNION,删除的时候也是如此了吧?
说:
 不需要的
 看你们的删除条件是什么了
 拆分表有很多种做法
 还是要看常用的SQL是什么样的
Saver 说:
 把已提取的认为是安全,无采集意义的玩意删除掉
说:
 可以直接删除这些东西的
 因为每个表的数据量都很小
 删除的代价并不高
Saver 说:
 就是需要操作多表感觉
说:
 不一定
Saver 说:
 不按用户分布?
说:
 所有的查询都带有md5的话,那就可以根据md5来分库
 分表
 看你的SQL语句是什么样了
 其实和用户没有关系的
 找一个最合理的分表方式,抛弃不必要的需求,然后就能诞生一个稳健的系统
Saver 说:
 嗯,这个系统最终的目的还是要去判断用户跑了哪些程序,判断这些程序是否有害,估计也只能算是附加功能
说:
 是的
Saver 说:
 但是如果是这样的话,那就涉及到按用户去统计的问题了
 有可能极限情况是用户数据被分到N个表里
 唉,这个应该算是代价的均衡问题了
 不过分布式系统的优势就体现出来了,并行计算
 比单表处理的性能要高了很多
 说:
 恩
 最终还是要有取舍的
 数据聚集是分布式最头疼的问题
 但是有些系统没有数据聚集需求
 可以先做
Saver 说:
 挖掘的话,那肯定是要聚集的
   
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载