+ -
当前位置:首页 → 问答吧 → mysql 数据库结构设计

mysql 数据库结构设计

时间:2011-08-01

来源:互联网

有这么一个应用的数据库,用来记录日记信息进行分析。
数据量一天在2-300W,该表读写都非常频繁,但是没更新操作,查询热点是最近三个月。
由于数据量实在大,所以想进行分表。一开始使用myisam引擎按月分表,然后merge最近三个月的表。但是发现myisam引擎在大量读写并发同时存在的时候会引起大量的堵塞锁表等待,将并行尾部插入(--concurrent_insert=2)或者是降低写性能都于事无补。
但是使用innodb又不能使用merger,要是使用union all创建视图又怕读的性能太低。

请问各位有没有类似经验,指点一下。

作者: linjia828   发布时间: 2011-08-01

还有用innodb使用分区表,按时间做range分区,但是又有人说mysql分区表BUG很多、、、、

版本5.5.12

作者: linjia828   发布时间: 2011-08-01

5.5.*系列的版本,无法给出建议

此业务非常适合使用分区表的架构....操作特点:

1.数据只有INSERT和SELECT

2.INSERT只为当前一个分区

3.查询热点是最近三个月...若是带有时间范围的查询没问题的,会只查询对应的分区

4.对于统计分析的内容,若是指针对一天的数据做统计分析,那也是非常有利的...


所以建议InnoDB+partition

作者: jinguanding   发布时间: 2011-08-01

额,这个其实我也是很想做分区表,但是我领导说分区表貌似BUG很多,不想做。

作者: linjia828   发布时间: 2011-08-01

有没有其他分片技术或者其他设计方式?

作者: linjia828   发布时间: 2011-08-01

你领导对分区有多少了解?
我一直用的5.1.40,5.1.34 二大版本,没有发现BUG,只发现分区存在的使用限制

其他办法到是有,比如借助存储过程解决...你继续使用InnoDB引擎的分表办法....

作者: jinguanding   发布时间: 2011-08-01



QUOTE:原帖由 linjia828 于 2011-8-1 10:00 发表
有没有其他分片技术或者其他设计方式?

有一种,就是物理分表,每三个月一个表,比如说 tb_name_2011010203,2011年前三月份的表。tb_name_2011040506,2011年4月份5月份6月份的表,tb_name_2011070809表示2011年7月份8月份9月份的表。一次类推。

因为mysql 分区的隐藏的bug,又没有稳定的官方支持,所以我们领导决定都是用物理分表的方式来解决实际问题。

而且innodb的ibd策略是 独享表空间,就是一个表一个ibd文件。

希望我自己的经历可以给你提供一些参考。

作者: mysqldbd   发布时间: 2011-08-01