国产分布式数据库StarDB核心技术大揭秘一:内核分解之数据分片

2022-04-01 00:00:00 数据 算法 路由 商户 切分

作者:徐力权(StarDB架构师)

数据分片是分布式数据库主要特性之一,好的分片设计能让数据库服务器资源得到大化利用,提升系统吞吐量。灵活的分片策略实现是StarDB的重要特性之一,StarDB在京东内部经过大量的实战积累了上百种分片算法。针对不同的业务需求,StarDB提供了多种多样的分片方案,首先介绍一下StarDB数据分片的设计。

数据分片设计原理

StarDB采用模块化分层设计思想,路由模块是专门针对数据分片和路由做设计的一个模块,StarDB对路由模块做了高度抽象,每一级路由采用了递归算法实现,能支持任意多级的路由,每一级的路由又可以自定义实现,故而组成了多种多样的路由算法类库。

首先看下路由模块执行流程:


再来看下路由模块的实现设计:

数据分片主要特性

一、业务层无感知

StarDB提供Driver和Proxy访问模式,用JDBC或MySQL协议访问,业务代码基本不用改造,对于业务使用透明,只需对逻辑表操作:

DDL不用对某个分表操作,由底层完全封装

二、灵活的路由算法 (内部使用达上百种)

哈希取模算法

范围算法

日期处理算法

自定义算法

指定库表强制路由算法

……

三、多种算法自由组合

先分库后分表

查询切分键

按业务类型和时间组合

指定分表路由

……


经典案例

一、常规哈希取模

这种是常规的路由方式,适合按某个字段打散数据,常规的像按订单号、用户pin、商户号等路由的场景都可以用哈希取模的方式。StarDB在此基础上,扩展了路由算法,比如有如下表

CREATE TABLE order (
 id int(11) NOT NULL AUTO_INCREMENT,
 order_no varchar(255) DEFAULT NULL COMMENT '订单号',
 creation_date timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间,非空',
 modification_date timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '后修改时间,非空',
 PRIMARY KEY (id),
) ENGINE=InnoDB COMMENT='订单表';

相关文章