拆分字段即分库/分表字段,是在水平拆分过程中用于生成拆分规则的数据表字段。数据访问代理会根据拆分字段的值将数据表水平拆分到每个物理库实例上的物理分库/分表中。
拆分原则
数据表拆分的首要原则,就是要尽可能找到数据表中的数据在业务逻辑上的主体,并确保大部分(或核心的)数据库操作都是围绕这个主体的数据进行,然后可使用该主体对应的字段作为拆分字段,进行分库分表。
选择业务逻辑主体
业务逻辑上的主体,通常与业务的应用场景相关,下面的一些典型应用场景都有明确的业务逻辑主体,可作为拆分字段:
面向用户的金融应用,都是围绕用户维度来做各种操作,那么业务逻辑主体就是用户,可使用用户对应的字段作为拆分字段;
侧重于卖家的电商应用,都是围绕卖家维度来进行各种操作,那么业务逻辑主体就是卖家,可使用卖家对应的字段作为拆分字段;
游戏类的应用,是围绕玩家维度来做各种操作,那么业务逻辑主体就是玩家,可使用玩家对应的字段作为拆分字段;
车联网方面的应用,则是基于车辆信息进行操作,那么业务逻辑主体就是车辆,可使用车辆对应的字段作为拆分字段;
税务类的应用,主要是基于纳税人的信息来开展前台业务,那么业务逻辑主体就是纳税人,可使用纳税人对应的字段作为拆分字段。
如果确实找不到合适的业务逻辑主体作为拆分字段,那么可以考虑下面的方法来选择拆分字段:
根据数据分布和访问的均衡度来考虑拆分字段,尽量将数据表中的数据相对均匀地分布在不同的物理分库/分表中,适用于大量分析型查询的应用场景(查询并发度大部分能维持为 1);
按照数字(字符串)类型与时间类型字段相结合作为拆分字段,进行分库和分表,适用于日志检索类的应用场景。
重要设计拆分字段及拆分规则时,需要注意拆分后数据的均衡性,避免出现数据不均衡从而导致数据热点。
数据访问代理支持多列拆分字段,即有多个拆分字段组成一个拆分规则,但是不推荐使用该方式。如果使用了多列拆分字段,后续的 SQL 执行均需要带上多列查询条件,对业务 SQL 的使用也会比较复杂。