关于垂直切分的粒度
垂直切分的粒度指的是在做垂直切分时允许几级的关联表放在一个shard里.这个问题对应用程序和sharding实现有着很大的影响.
关联打断地越多,则受影响的join操作越多,应用程序为此做出的妥协就越大,但单表的路由会越简单,与业务的关联性会越小,就越容易使用统一机制处理.在此方向上的极端方案是:打断所有连接,每张表都配有路由规则,可以使用统一机制或框架自动处理.比如amoeba这样的框架,它的路由能且仅能通过SQL的特征(比如某个表的id)进行路由.
反之,若关联打断地越少,则join操作的受到的限制就小,应用程序需要做出的妥协就越小,但是表的路由就会变复杂,与业务的关联性就越大,就越难使用统一机制处理,需要针对每个数据请求单独实现路由.在此方向上的极端方案是:所有表都在一个shard里,也就是没有垂直切分,这样就没有关联被打断.当然这是非常极端的,除非整个数据库很简单,表的数量很少.
实际的粒度掌控需要结合“业务紧密程度”和“表格数据量”两个因素综合考虑,一般来说:
- 若划归到一起的表格关系紧密,且数据量并不大,增速也非常缓慢,则适宜放在一个shard里,不需要再进行水平切分;
- 若划归到一起的表格数据量巨大且增速迅猛,则势必要在垂直切分的基础上再进行水平切分,水平切分就意味着原单一shard会被细分成多个更小的shard,每一个shard存在一个主表(即会以该表ID进行散列的表)和多个相之相关的关联表。
总之,垂直切分的粒度在两个相反的方向上呈现优势与劣势并存并相互博弈的局面.架构师需要做的是结合项目的实际情况在两者之间取得收益最大化的平衡.
相关推荐
3、使用 Sharding-JDBC 垂直切分 4、使用 Sharding-JDBC 操作公共表 5、使用使用 Sharding-JDBC 读写分离 三、Sharding-Proxy 1、什么是 Sharding-Proxy 2、使用 Sharding-Proxy 分库分表 3、使用 Sharding-Proxy ...
数据库Sharding的基本思想和切分策略
spring-sharding-mybatisspring-sharding-mybatisspring-sharding-mybatis
shardingJdbc
使用mysql5.7+sharding-proxy实现分表,策略为每半年时间分一次表
sharding-sphere4.1.1
Sharding JDBC MySQL 2016 数据库嘉年华,当当网 技术专家 分享
MongoDB Sharding 机制分析及实现
Oracle_Sharding 演示视频 演示如何搭建和测试sharding.
oracle12c sharding 安装配置文档
开源项目-go-pg-sharding.zip,用go和postgresql实现数据库切分
sjdbc-db-sharding-springboot:Spring Boot版 Sharding JDBC 垂直拆分(不同的表在不同的库中) sjdbc-db-read-write-sharding-springboot:Spring Boot版 Sharding JDBC 垂直拆分(不同的表在不同的库中)+ 读写...
springboot整合sharding-jdbc完整代码,基本上涵盖了sharding-jdbc所有技术点,代码只需要简单修改下配置即可运行起来
sharding-proxy和sharding-ui 简介与v5.0.0-beat版本搭建配置,相关建库建表sql
1、创建数据库 首先我们创建相应的数据库 create database sharding_0; create database sharding_1; 这样我们就创建了两个数据库sharding_0和sharding_1; 脚本在项目里面
Sharding Sphere课堂笔记.pdf
ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成。 他们均提供标准化的数据分片、分布式事务和数据库...
Mongodb配置Sharding详细过程
Sharding-JDBC是一个开源的适用于微服务的分布式数据访问基础类库,它始终以云原生的基础开发套件为目标。 Sharding-JDBC定位为轻量级java框架,使用客户端直连数据库,以jar包形式提供服务,未使用中间层,无需...