如何选择拆分键

发布时间:2018-12-14 08:18:12

拆分键即分库/分表字段,是在水平拆分过程中用于生成拆分规则的数据表字段。DRDS 根据拆分键的值将数据表水平拆分到每个 RDS 实例上的物理分库中。

数据表拆分的首要原则,就是要尽可能找到数据表中的数据在业务逻辑上的主体,并确定大部分(或核心的)数据库操作都是围绕这个主体的数据进行,然后可使用该主体对应的字段作为拆分键,进行分库分表。

业务逻辑上的主体,通常与业务的应用场景相关,下面的一些典型应用场景都有明确的业务逻辑主体,可用于拆分键:

面向用户的互联网应用,都是围绕用户维度来做各种操作,那么业务逻辑主体就是用户,可使用用户对应的字段作为拆分键;

侧重于卖家的电商应用,都是围绕卖家维度来进行各种操作,那么业务逻辑主体就是卖家,可使用卖家对应的字段作为拆分键;

游戏类的应用,是围绕玩家维度来做各种操作,那么业务逻辑主体就是玩家,可使用玩家对应的字段作为拆分键;

车联网方面的应用,则是基于车辆信息进行操作,那么业务逻辑主体就是车辆,可使用车辆对应的字段作为拆分键;

税务类的应用,主要是基于纳税人的信息来开展前台业务,那么业务逻辑主体就是纳税人,可使用纳税人对应的字段作为拆分键。

以此类推,其它类型的应用场景,大多也能找到合适的业务逻辑主体作为拆分键的选择。

例如,某面向卖家的电商应用,需要对下面的一张单表进行水平拆分:

 

 

CREATE TABLE sample_order (

  id INT(11) NOT NULL,

  sellerId INT(11) NOT NULL,

  trade_id INT(11) NOT NULL,

  buyer_id INT(11) NOT NULL,

  buyer_nick VARCHAR(64) DEFAULT NULL,

  PRIMARY KEY (id)

)

由于确定了业务逻辑主体为卖家,那么选择对应的字段 sellerId 作为拆分键,且只分库不分表,则分布式 DDL 建表语句为:

 

 

CREATE TABLE sample_order (

  id INT(11) NOT NULL,

  sellerId INT(11) NOT NULL,

  trade_id INT(11) NOT NULL,

  buyer_id INT(11) NOT NULL,

  buyer_nick VARCHAR(64) DEFAULT NULL,

  PRIMARY KEY (id)

) DBPARTITION BY HASH(sellerId)

如果确实找不到合适的业务逻辑主体作为拆分键,那么可以考虑下面的方法来选择拆分键:

根据数据分布和访问的均衡度来考虑拆分键,尽量将数据表中的数据相对均匀地分布在不同的物理分库/分表中,适用于大量分析型查询的应用场景(查询并发度大部分能维持为1);

按照数字(字符串)类型与时间类型字段相结合作为拆分键,进行分库和分表,适用于日志检索类的应用场景。

例如,某日志系统记录用户的所有操作,需要对下面的日志单表进行水平拆分:

 

 

CREATE TABLE user_log (

  userId INT(11) NOT NULL,

  name VARCHAR(64) NOT NULL,

  operation VARCHAR(128) DEFAULT NULL,

  actionDate DATE DEFAULT NULL

)

可以选择用户标识与时间字段相结合作为拆分键,并按照一周七天进行分表,则分布式 DDL 建表语句为:

 

 

CREATE TABLE user_log (

  userId INT(11) NOT NULL,

  name VARCHAR(64) NOT NULL,

  operation VARCHAR(128) DEFAULT NULL,

  actionDate DATE DEFAULT NULL

) DBPARTITION BY HASH(userId) TBPARTITION BY WEEK(actionDate) TBPARTITIONS 7

更多拆分键的选择和分表形式,请参考 DRDS DDL 语句

注意:无论选择什么拆分键,采用何种拆分策略,都要注意拆分值是否存在热点的问题,尽量规避热点数据来选择拆分键。
 

如果您按本文操作没有解决您的问题,请及时联系我方客服,阿里云代理商凯铧互联专业技术团队为您提供全面便捷专业的7x24技术服务。 凯铧互联官网:www.bjkaihua.com;阿里云业务网址:www.alibjyun.com。 

 

为什么选择我们:北京凯铧互联科技有限公司(简称凯铧互联)由多名前阿里云资深技术专家创立,核心员工来自阿里巴巴、腾讯等,作为阿里云,腾讯云百度云,金山云,华为云重要的合作伙伴,专注于为企业用户提供云计算及云计算的解决方案。总部设在北京,并在内蒙设有办事处。做为一家综合性方案商,凯铧互联向各行业用户提供基于云计算的各种解决方案。为用户获得优质服务的同时,秉承"专业规划、周到服务"的服务理念,根据用户的实际情况,充分考虑各种网络资源的特点及功效,为用户量身定做一套适合于其实际应用需求的网络应用方案。帮助用户利用互联网的力量展开新的营销方式,并大大缩短了项目实施周期,获得用户的一致好评。