国产分布式数据库StarDB核心技术大揭秘一:内核分解之数据分片
作者:徐力权(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='订单表';
相关文章