千万级表,读写相当频繁,该用什么思路去优化? - 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
BeanYoung
V2EX    MySQL

千万级表,读写相当频繁,该用什么思路去优化?

  •  
  •   BeanYoung Sep 6, 2013 6607 views
    This topic created in 4631 days ago, the information mentioned may be changed or developed.
    问题是这样的,有三张表,user, foo, bar。每张表的字段数都在10以上。其中foo量级在5000w,bar在20000w。这两张表的某些字段(每张表两个左右)每天都会更新一遍。foo表每天增加1w,bar表每天增加200w。foo.user_id = user.user_id, foo.foo_id = bar.bar_id。
    有上百台服务器,每台服务器有50个左右的mysql连接(无法做连接池)。数据库并发连接数在4000左右,且每个链接都是更新操作为主。
    目前的方案是,在mysql上通过thrift实现一层http的service,提供api,每台服务器来调用api进行数据更新。
    拆表方面,打算把user,foo和bar垂直拆表,将不需要更新的字段和需要更新的字段分开。必要时再将需要更新字段组成的表再做水平拆表。

    不知道大家有没有这方面的经验,欢迎大家提供更好的方案
    9 replies    1970-01-01 08:00:00 +08:00
    master
        1
    master  
       Sep 6, 2013
    只是foo.user_id = user.user_id, foo.foo_id = bar.bar_id这样的关系的话,其实可以考虑下 NoSQL
    BeanYoung
        2
    BeanYoung  
    OP
       Sep 6, 2013
    @master 写错了,是foo.foo_id = bar.foo_id
    master
        3
    master  
       Sep 6, 2013
    @BeanYoung
    喔喔,其实主要看这些数据更新记录以后还需要什么样的查询,
    如果只是这种这种关系场景的更新我觉得用NoSQL没问题
    zhangrentina
        4
    zhangrentina  
       Sep 7, 2013
    水平拆表,读写用master slave分离。有ssd最好了
    saharabear
        5
    saharabear  
       Sep 7, 2013
    换个好硬件?
    yangqi
        6
    yangqi  
       Sep 7, 2013
    这个级别肯定要上mysql cluster了,去管网了解一下
    likuku
        7
    likuku  
       Sep 8, 2013
    一个master 只管写,「foo表每天增加1w,bar表每天增加200w」,这种普通硬盘RAID足够了。

    多个 slave 从 master 同步,最好都是ssd的raid,cpu 也要强,mysql 5.6 以前 slave 单线程从 master 同步,所以CPU和io要足够强才能即时追上master的更新速度。

    memcached 机群一定要用,有个日本人作的补丁,可以让多台 memcached 互相自动同步互备。
    likuku
        8
    likuku  
       Sep 8, 2013
    抱歉没看到「有上百台服务器,每台服务器有50个左右的mysql连接(无法做连接池)。数据库并发连接数在4000左右,且每个链接都是更新操作为主。」

    这个需求貌似在 mysql 上只有 6楼 @yangqi 讲的 “mysql cluster” 才可了。
    VYSE
        9
    VYSE  
       Sep 8, 2013
    @likuku 用CLUSTER的就要注意简单一句join foo.user_id = user.user_id这种千万级的数据,用完这辈子结果就能跑出来了。
    可能只有SCI的连接方案(没试过)解决。
    如果只是select/update一个表,倒是没啥大问题,只要注意ndb偶尔crash(log直接显示代码多少多少行有问题或干脆承认就是有个unknown bug会crash)时有个脚本负责花几十分钟冷重启就行了
    About     Help     Advertise     Blog     API     FAQ     Solana     3426 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 61ms UTC 12:13 PVG 20:13 LAX 05:13 JFK 08:13
    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