一个拥有过亿用户的表,如何设计它,让它达到更好的性能?

2012-09-04 14:32:46 +08:00
 binge
如题,对于大量数据的表,各位是怎样设计的,就拿用户表来说说吧。在实际中也会遇到这种情况,当数据量达到百万级的时候,神马执行的效率都明显低下来。
9447 次点击
所在节点    MySQL
19 条回复
feiandxs
2012-09-04 14:41:49 +08:00
虽然方法多种多样,但根据楼主问问题的表述方法,臆测了下楼主可能会用的手段以及不太可能会用到的方案,最后答案两个字。

拆之。
bruce
2012-09-04 15:17:04 +08:00
我只想说一句:假如你获取一个用户成本1毛,搞到1亿用户成本就是1000万元。
binge
2012-09-04 15:22:31 +08:00
@bruce 如果抛开成本不说呢?本话题重点在大数据量的处理上。
FinF
2012-09-04 15:25:09 +08:00
分表
chairo
2012-09-04 15:50:24 +08:00
看具体情况了,如果只用用户id索引查询的话,在用户id列加个索引,效率也就差不多了

否则拆表,拆库,读写分离,db负载均衡,memcache,nosql啥牛逼就上啥。
bruce
2012-09-04 16:25:30 +08:00
手头巧好有个 2 亿条数据存在 MongoDB 的表,查询毫无压力。

如今如果优化的好,千万数据 MYSQL 单表毫无压力。
binge
2012-09-04 16:26:57 +08:00
@bruce 求经验分享 :)
bruce
2012-09-04 16:30:14 +08:00
MYSQL 优化: http://blog.eood.cn/mysql
MongoDB 只要加好索引问题就不大了。
alexzhan
2012-09-04 16:35:07 +08:00
不见得分表就是最好的方式。
具体情况具体分析。
Reddit's database has only two tables.
http://kev.inburke.com/kevin/reddits-database-has-two-tables/
idblife
2012-09-04 19:07:51 +08:00
对于oracle来说,这个很轻松,分区表即可。对mysql不熟悉。。。
cam
2012-09-04 23:52:30 +08:00
请先确定,你的用户真的过亿吗?如果是就用钱来搞定。
binge
2012-09-05 08:28:53 +08:00
@cam 哈哈,我也想,用户表只是打个比方,我想表达的纯粹是一个存储大量数据的表如何设计而已。
0bit
2012-09-05 09:35:26 +08:00
PostgreSQL的话,可以用分区表,MySQL就不知道了,木有用过
zhuf
2012-09-05 10:43:58 +08:00
mysql 可以拆表,或者读写分离。
不过具体场景还是具体分析吧。
areless
2012-09-05 11:50:06 +08:00
不要做徒劳的设计了,提高4K读写自然会快,SSD做RAID 0吧。
无论哪种数据库,哪种方式优化。。。在一台才几M读取速度的机械硬盘老爷机下都没有意义。
bigwang
2012-09-05 12:29:05 +08:00
根据查询条件分表分库,百万规模的表和千万规模的表,查询速度有很大差别

如果拿 MongoDB 做线上实时查询,那是玩票不负责的

mongodb比较适合做数据挖掘,分析日志什么的,可以当做一个单机,简易版的hadoop用
ewangke
2012-09-05 14:14:17 +08:00
@bruce MongoDB是不是很费存储空间?现在MongoDB的DBaaS平台都挺贵的。
chaker
2012-09-05 15:44:54 +08:00
用 TTree,上TB的数据也没问题
bruce
2012-09-24 10:07:12 +08:00
@ewangke 极费空间,而且费内存。没有完美的事。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/46866

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX