• 请不要在回答技术问题时复制粘贴 AI 生成的内容
cjyang1128
V2EX  ›  程序员

Mysql 分表的问题,求教

  •  1
     
  •   cjyang1128 · Sep 17, 2015 · 3140 views
    This topic created in 3893 days ago, the information mentioned may be changed or developed.

    在我的 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 replies    2015-09-17 21:55:28 +08:00
    cjyang1128
        1
    cjyang1128  
    OP
       Sep 17, 2015
    求解~
    kslr
        2
    kslr  
       Sep 17, 2015
    对你字段的分析应该都是 Int 吧,除了 create_time 这样的,千万还没达到需要分表的地步,分表后也很麻烦,还是优化吧。

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

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

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