V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
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 · 2012-09-04 14:32:46 +08:00 · 9426 次点击
    这是一个创建于 4448 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如题,对于大量数据的表,各位是怎样设计的,就拿用户表来说说吧。在实际中也会遇到这种情况,当数据量达到百万级的时候,神马执行的效率都明显低下来。
    19 条回复    1970-01-01 08:00:00 +08:00
    feiandxs
        1
    feiandxs  
       2012-09-04 14:41:49 +08:00
    虽然方法多种多样,但根据楼主问问题的表述方法,臆测了下楼主可能会用的手段以及不太可能会用到的方案,最后答案两个字。

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

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

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

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

    mongodb比较适合做数据挖掘,分析日志什么的,可以当做一个单机,简易版的hadoop用
    ewangke
        17
    ewangke  
       2012-09-05 14:14:17 +08:00
    @bruce MongoDB是不是很费存储空间?现在MongoDB的DBaaS平台都挺贵的。
    chaker
        18
    chaker  
       2012-09-05 15:44:54 +08:00
    用 TTree,上TB的数据也没问题
    bruce
        19
    bruce  
       2012-09-24 10:07:12 +08:00
    @ewangke 极费空间,而且费内存。没有完美的事。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2698 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 12:50 · PVG 20:50 · LAX 04:50 · JFK 07:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.