使用 zebra 对数据库表进行水平拆分

本文介绍了如何利用Zebra,一个由美团点评开发的数据库访问层中间件,进行数据库表的水平拆分。主要讨论了数据库目标表结构、主维度选取、路由规则及其详细说明,并提供了测试案例。
摘要由CSDN通过智能技术生成

zebra 是美团点评开发的数据库访问层中间件,代码维护在 GitHub:Meituan-Dianping/Zebra

Zebra是一个基于JDBC API协议上开发出的高可用、高性能的数据库访问层解决方案,是美团点评内部使用的数据库访问层中间件。具有以下的功能点:

  • 配置集中管理,动态刷新
  • 支持读写分离、分库分表
  • 丰富的监控信息在CAT上展现
  • 异步化数据库请求,多数据源支持

zebra 的 QuickStart 提供了完整的使用说明文档,这里就不再赘述用法,而是直接提供一个使用 zebra 进行数据库分表的 demo。

数据库目标表结构

数据库表为签到表(sign_in),表结构如下:
签到表用于记录用户签到数据,CUSTOMER_ID 为用户 id,其余字段是为了 demo 测试而建,无特殊含义。

image.png

主维度选取

选择签到表的 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=
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值