当前位置: 首页 > database>阅读正文

myiasm 使用 merge 引擎简单分表

2022.7.3 朱丰华 345 次 留下评论 887字

MERGE存储引擎把一组MyISAM数据表当做一个逻辑单元来对待,让我们可以同时对他们进行查询。构成一个MERGE数据表结构的各成员MyISAM数据表必须具有完全一样的结构。每一个成员数据表的数据列必须按照同样的顺序定义同样的名字和类型,索引也必须按照同样的顺序和同样的方式定义。

简单来说,多个表的结构必须一模一样。然后就可以使用 merge 引擎进行自动的合并操作,在查询方面,相当于 union 。

实践:

存在一个评论表 common ,一般来说评论表数据(行数)可能比较多,所以进行“水平分割”的方式进行分表,每 10w 条存储在一个表中。

在程序中插入评论时,进行判断:如果最后一个表(从汇总表中取得)的数据 >= 10w,则创建一个新表,并把改表名存储到一个专门记录分表表名的汇总表中。

每一个新表的自增ID是上一个表最后一条的最大值,用于保证每个分表中的自增ID不会重复。

通过这些操作,就可以让程序自动插入到对应的分表中。

在查询、修改、删除时,可以直接操作总表(总表为 MGR_MYISAM结构)。

CREATE TABLE `user` (
  `id` bigint(21) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8 DEFAULT NULL
  PRIMARY KEY (`id`)
) ENGINE=MRG_MyISAM DEFAULT CHARSET=latin1 INSERT_METHOD=LAST UNION=(`uion_user_1`,`uion_user_2`,`uion_user_3`);

MRG的结构,和分表应该一模一样,设置 insert_method=last时,总是插入到最后一张表中。union就是指定所有的分表。

总结:MYISAM表存储数据,而 MGR_MYISAM 做为总表汇总,总表不记录数据、不维护索引,索引仍由各个分表进行维护。只需在插入时,动态计算数据应该插入在哪张分表中,而其他操作可以直接操作总表,总表是 merge 生成的。(删除总表中的一行数据,分表对应数据会自动删除,如果把整张总表删除,则不会自动把分表全部删除)。

本篇完,还有疑问?留下评论吧

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注