V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cjyang1128
V2EX  ›  程序员

Mysql 分表的问题,求教

  •  1
     
  •   cjyang1128 · 2015-09-17 11:39:27 +08:00 · 2706 次点击
    这是一个创建于 3363 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在我的 Mysql 5.5 中,现在有一张表 user_activity 专门用来存储用户的操作行为。表结构大致是这样的, id (自增主键), user_id , enterprise_id , action_type_id , created_time 。现在由于该表的数据量已经变得很大了(已经快达到千万行),需要进行分表。因为我们经常是查询某个企业下的用户操作行为,所以按照 enterprise_id 进行分表是一个方法。问题如下:
    1.如果要进行分表,那么一开始分表的 SQL 要怎么写比较好,然后因为我们采用的是 INNODB 引擎,用不了 merge 类型的分表。
    2.如果要进行分表,对于我现在的业务情况,对 enterprise_id 采用怎样的 sharding 算法会比较好。
    3.网上看了很多关于分表和分区的介绍,感觉还是云里雾里。对于我这样的业务情况,需要采用的是分表还是分区。它们的区别是什么呢?

    望各位大神指点~

    16 条回复    2015-09-17 21:55:28 +08:00
    cjyang1128
        1
    cjyang1128  
    OP
       2015-09-17 13:21:39 +08:00
    求解~
    kslr
        2
    kslr  
       2015-09-17 13:40:13 +08:00
    对你字段的分析应该都是 Int 吧,除了 create_time 这样的,千万还没达到需要分表的地步,分表后也很麻烦,还是优化吧。

    对了, mysql5.6 性能提升很多,严重推荐
    cjyang1128
        3
    cjyang1128  
    OP
       2015-09-17 14:05:09 +08:00
    @kslr 是这样的,因为这张表迟早是要分的,所以才会要求分表,然而我也没有这方面的经验。 mysql5.6 我可以看一下,谢谢回答~
    kslr
        4
    kslr  
       2015-09-17 14:11:38 +08:00
    @cjyang1128 话说像用户操作这些为什么不把几个月前的扔掉?没做过这块问问
    kingwkb
        5
    kingwkb  
       2015-09-17 14:13:14 +08:00 via iPhone
    千万级不需要分表,为什么迟早要分表
    cjyang1128
        6
    cjyang1128  
    OP
       2015-09-17 14:16:39 +08:00
    @kingwkb 因为是用户操作,所以增长的速度很快
    @kslr 目前来说还是需要所有的操作记录的
    9hills
        7
    9hills  
       2015-09-17 14:23:50 +08:00
    按照 enterprise_id 分表,但是不同企业的数据量可能差别特别大,导致你分的表会变的不均匀

    分表不仅要考虑查询效率,也要考虑数据均匀啊
    kslr
        8
    kslr  
       2015-09-17 14:27:39 +08:00
    @cjyang1128 我觉得更适合按照月分表,到时候直接按照时间找数据就行了。
    9hills
        9
    9hills  
       2015-09-17 14:31:13 +08:00
    一般来说是按照 user_id 取模的方式来分,这样大体上保证数据比较均匀。

    当然弱点就是你查询范围是单个企业时,要遍历所有的表。
    cjyang1128
        10
    cjyang1128  
    OP
       2015-09-17 14:32:06 +08:00
    @9hills 这是个问题,我们讨论了之后决定先暂时不管这个。其实我们只是先试行分表的方法,先去踩坑。
    cjyang1128
        11
    cjyang1128  
    OP
       2015-09-17 14:32:53 +08:00
    @kslr 这个我们也考虑一下,谢谢~
    sunmonster
        12
    sunmonster  
       2015-09-17 14:42:53 +08:00
    为什么不用 nosql 呢,比如 mongodb ,一个企业,一个 collection ,对每个 collection 设置为固定 collection ,不过我自己也没有用过
    cjyang1128
        13
    cjyang1128  
    OP
       2015-09-17 16:10:14 +08:00
    @sunmonster 还是先用 mysql ,实在不行再去考虑其他的 nosql 数据库
    hymanhai
        14
    hymanhai  
       2015-09-17 18:04:23 +08:00
    千万级不需要分表,对于 mysql 对几 KW 的数据的支持都是很 easy 的,而且看的你表示设计的也不复杂,关键是看你对数据库怎么使用。
    最最要的是你这是存储用户信息的,你觉得你们公司的用户增长有多快??
    Mac
        15
    Mac  
       2015-09-17 18:11:53 +08:00 via iPhone
    近 3 月一个表,其他一个表
    akira
        16
    akira  
       2015-09-17 21:55:28 +08:00
    按日期建表,每天丢给做数据分析的人
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2753 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 11:29 · PVG 19:29 · LAX 03:29 · JFK 06:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.