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 · 10337 views
    This topic created in 4986 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   ·   2709 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 54ms · UTC 14:57 · PVG 22:57 · LAX 07:57 · JFK 10:57
    ♥ Do have faith in what you're doing.