文档章节

关于垂直切分Vertical Sharding的粒度

猪刚烈
 猪刚烈
发布于 2014/10/12 11:40
字数 752
阅读 15
收藏 0

垂直切分的粒度指的是在做垂直切分时允许几级的关联表放在一个shard里.这个问题对应用程序和sharding实现有着很大的影响.


关联打断地越多,则受影响的join操作越多,应用程序为此做出的妥协就越大,但单表的路由会越简单,与业务的关联性会越小,就越容易使用统一机制处理.在此方向上的极端方案是:打断所有连接,每张表都配有路由规则,可以使用统一机制或框架自动处理.比如amoeba这样的框架,它的路由能且仅能通过SQL的特征(比如某个表的id)进行路由.


反之,若关联打断地越少,则join操作的受到的限制就小,应用程序需要做出的妥协就越小,但是表的路由就会变复杂,与业务的关联性就越大,就越难使用统一机制处理,需要针对每个数据请求单独实现路由.在此方向上的极端方案是:所有表都在一个shard里,也就是没有垂直切分,这样就没有关联被打断.当然这是非常极端的,除非整个数据库很简单,表的数量很少.


实际的粒度掌控需要结合“业务紧密程度”和“表格数据量”两个因素综合考虑,一般来说:

  • 若划归到一起的表格关系紧密,且数据量并不大,增速也非常缓慢,则适宜放在一个shard里,不需要再进行水平切分;
  • 划归到一起的表格数据量巨大且增速迅猛,则势必要在垂直切分的基础上再进行水平切分,水平切分就意味着原单一shard会被细分成多个更小的shard,每一个shard存在一个主表(即会以该表ID进行散列的表)和多个相之相关的关联表。

总之,垂直切分的粒度在两个相反的方向上呈现优势与劣势并存并相互博弈的局面.架构师需要做的是结合项目的实际情况在两者之间取得收益最大化的平衡.


相关阅读:

数据库分库分表(sharding)系列(五) 一种支持自由规划无须数据迁移和修改路由代码的Sharding扩容方案

数据库分库分表(sharding)系列(四) 多数据源的事务处理

数据库分库分表(sharding)系列(三) 关于使用框架还是自主开发以及sharding实现层面的考量

数据库分库分表(sharding)系列(二) 全局主键生成策略

数据库分库分表(sharding)系列(一) 拆分实施策略和示例演示

关于垂直切分Vertical Sharding的粒度

数据库Sharding的基本思想和切分策略


本文转载自:http://blog.csdn.net/bluishglc/article/details/6274841

共有 人打赏支持
猪刚烈
粉丝 22
博文 708
码字总数 110
作品 1
海淀
程序员
关于垂直切分Vertical Sharding的粒度

垂直切分的粒度指的是在做垂直切分时允许几级的关联表放在一个shard里.这个问题对应用程序和sharding实现有着很大的影响. 关联打断地越多,则受影响的join操作越多,应用程序为此做出的妥协...

bluishglc
2011/03/24
0
0
数据库Sharding的基本思想和切分策略

本文着重介绍sharding的基本思想和理论上的切分策略,关于更加细致的实施策略和参考事例请参考我的另一篇博文:数据库分库分表(sharding)系列(一) 拆分实施策略和示例演示 一、基本思想 Shar...

bluishglc
2011/01/24
0
0
数据库分库分表(sharding)系列(一) 拆分实施策略和示例演示

本文原文连接: http://blog.csdn.net/bluishglc/article/details/7696085 ,转载请注明出处!本文着重介绍sharding切分策略,如果你对数据库sharding缺少基本的了解,请参考我另一篇从基础理论...

bluishglc
2012/06/27
0
0
数据库分库分表(sharding)系列(四) 多数据源的事务处理

系统经sharding改造之后,原来单一的数据库会演变成多个数据库,如何确保多数据源同时操作的原子性和一致性是不得不考虑的一个问题。总体上看,目前对于一个分布式系统的事务处理有三种方式:...

bluishglc
2012/07/27
0
0
数据库Sharding的基本思想和切分策略

本文着重介绍sharding的基本思想和理论上的切分策略,关于更加细致的实施策略和参考事例请参考我的另一篇博文:数据库分库分表(sharding)系列(一) 拆分实施策略和示例演示 一、基本思想 Shar...

张升强
2013/10/22
0
1

没有更多内容

加载失败,请刷新页面

加载更多

分布式缓存架构设计

零、 题记 在高并发场景下,需要通过缓存来减少数据库的压力,使得大量的访问进来能够命中缓存,只有少量的需要到数据库层。由于缓存基于内存,可支持的并发量远远大于基于硬盘的数据库。所以...

Ala6
刚刚
0
0
简单工厂模式

public abstract class Operation { private double numberA = 0; private double numberB = 0; public double getNumberA() { return numberA; } ......

NinjaFrog
2分钟前
0
0
git(一) git基本操作(branch、tag、冲突)

撤销操作 修改最后一次提交 解释:修改上次提交。可以修改内容和提交信息 适用场景: 1) 提交信息写错了; 2) 提交多加了配置文件; 3)提交少加了文件 示例操作: $ git commit -m '提交1'...

开心的哈士奇
5分钟前
0
0
Vue中路由管理器Vue Router使用方式(二)-推荐

一、Vue中使用Vue Router简单方式使用 vue add xxx命令添加插件 使用步骤,本人假设已经安装好了Vue CLI工具,了解更多参考:VSCode 搭建Vue开发环境之Vue CLI 1.创建项目 vue create hello...

tianma3798
18分钟前
0
0
设计模式(十六)[结构模式] 装饰模式(Decorator)

1.什么是装饰模式? 装饰模式又名包装模式。装饰模式以对客户端透明的方式扩展对象功能,是继承关系的一个替代方案。 2.模式的类图 抽象构件(Component)角色:给出一个抽象接口,以规范准备接收...

1527
19分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部