Mysql 分表的问题,求教

2015-09-17 11:39:27 +08:00
 cjyang1128

在我的 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.网上看了很多关于分表和分区的介绍,感觉还是云里雾里。对于我这样的业务情况,需要采用的是分表还是分区。它们的区别是什么呢?

望各位大神指点~

2639 次点击
所在节点    程序员
16 条回复
cjyang1128
2015-09-17 13:21:39 +08:00
求解~
kslr
2015-09-17 13:40:13 +08:00
对你字段的分析应该都是 Int 吧,除了 create_time 这样的,千万还没达到需要分表的地步,分表后也很麻烦,还是优化吧。

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

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

当然弱点就是你查询范围是单个企业时,要遍历所有的表。
cjyang1128
2015-09-17 14:32:06 +08:00
@9hills 这是个问题,我们讨论了之后决定先暂时不管这个。其实我们只是先试行分表的方法,先去踩坑。
cjyang1128
2015-09-17 14:32:53 +08:00
@kslr 这个我们也考虑一下,谢谢~
sunmonster
2015-09-17 14:42:53 +08:00
为什么不用 nosql 呢,比如 mongodb ,一个企业,一个 collection ,对每个 collection 设置为固定 collection ,不过我自己也没有用过
cjyang1128
2015-09-17 16:10:14 +08:00
@sunmonster 还是先用 mysql ,实在不行再去考虑其他的 nosql 数据库
hymanhai
2015-09-17 18:04:23 +08:00
千万级不需要分表,对于 mysql 对几 KW 的数据的支持都是很 easy 的,而且看的你表示设计的也不复杂,关键是看你对数据库怎么使用。
最最要的是你这是存储用户信息的,你觉得你们公司的用户增长有多快??
Mac
2015-09-17 18:11:53 +08:00
近 3 月一个表,其他一个表
akira
2015-09-17 21:55:28 +08:00
按日期建表,每天丢给做数据分析的人

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/221380

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX