zebra 是美团点评开发的数据库访问层中间件,代码维护在 GitHub:Meituan-Dianping/Zebra
Zebra是一个基于JDBC API协议上开发出的高可用、高性能的数据库访问层解决方案,是美团点评内部使用的数据库访问层中间件。具有以下的功能点:
- 配置集中管理,动态刷新
- 支持读写分离、分库分表
- 丰富的监控信息在CAT上展现
- 异步化数据库请求,多数据源支持
zebra 的 QuickStart 提供了完整的使用说明文档,这里就不再赘述用法,而是直接提供一个使用 zebra 进行数据库分表的 demo。
数据库目标表结构
数据库表为签到表(sign_in),表结构如下:
签到表用于记录用户签到数据,CUSTOMER_ID 为用户 id,其余字段是为了 demo 测试而建,无特殊含义。
主维度选取
选择签到表的 CUSTOMER_ID 作为维度。
选取维度时需要考虑下面的情况:
在 sql 语句中,顾客 CUSTOMER_ID 是在 CRUD 操作中作为查询目标属性和条件属性中出现次数最多的字段,这样能满足 zebra 要求中的维度必须出现在 sql 语句中的限制;同时很多查询,检索的 sql 都是基于同一顾客进行的,方便业务逻辑变更;此外,顾客 id 在签到表中与主键直接相关,一条签到记录必然有一个顾客 id ,根据顾客 id 能更快的定位签到记录所在范围。
路由规则
<?xml version="1.0" encoding="UTF-8"?>
<router-rule>
<table-shard-rule table="sign_in" generatedPK="id">
<shard-dimension
dbRule="#customer_id# * 0"
dbIndexes=