一个拥有过亿用户的表,如何设计它,让它达到更好的性能? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
binge
V2EX    MySQL

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

  •  
  •   binge Sep 4, 2012 10335 views
    This topic created in 4985 days ago, the information mentioned may be changed or developed.
    如题,对于大量数据的表,各位是怎样设计的,就拿用户表来说说吧。在实际中也会遇到这种情况,当数据量达到百万级的时候,神马执行的效率都明显低下来。
    19 replies    1970-01-01 08:00:00 +08:00
    feiandxs
        1
    feiandxs  
       Sep 4, 2012
    虽然方法多种多样,但根据楼主问问题的表述方法,臆测了下楼主可能会用的手段以及不太可能会用到的方案,最后答案两个字。

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

    否则拆表,拆库,读写分离,db负载均衡,memcache,nosql啥牛逼就上啥。
    bruce
        6
    bruce  
       Sep 4, 2012
    手头巧好有个 2 亿条数据存在 MongoDB 的表,查询毫无压力。

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

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

    mongodb比较适合做数据挖掘,分析日志什么的,可以当做一个单机,简易版的hadoop用
    ewangke
        17
    ewangke  
       Sep 5, 2012
    @bruce MongoDB是不是很费存储空间?现在MongoDB的DBaaS平台都挺贵的。
    chaker
        18
    chaker  
       Sep 5, 2012
    用 TTree,上TB的数据也没问题
    bruce
        19
    bruce  
       Sep 24, 2012
    @ewangke 极费空间,而且费内存。没有完美的事。
    About     Help     Advertise     Blog     API     FAQ     Solana     931 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 77ms UTC 20:45 PVG 04:45 LAX 13:45 JFK 16:45
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86