关于垂直切分Vertical Sharding的粒度

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

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

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

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

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

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

相关阅读:

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

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

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

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

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

关于垂直切分Vertical Sharding的粒度

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

关于垂直切分Vertical Sharding的粒度

时间: 2024-08-05 08:34:18

关于垂直切分Vertical Sharding的粒度的相关文章

转关于垂直切分Vertical Sharding的粒度

垂直切分的粒度指的是在做垂直切分时允许几级的关联表放在一个shard里.这个问题对应用程序和sharding实现有着很大的影响. 关联打断地越多,则受影响的join操作越多,应用程序为此做出的妥协就越大,但单表的路由会越简单,与业务的关联性会越小,就越容易使用统一机制处理.在此方向上的极端方案是:打断所有连接,每张表都配有路由规则,可以使用统一机制或框架自动处理.比如amoeba这样的框架,它的路由能且仅能通过SQL的特征(比如某个表的id)进行路由. 反之,若关联打断地越少,则join操作的受

mycat读写分离+垂直切分+水平切分+er分片+全局表 测试

原文http://blog.163.com/[email protected]/blog/static/172718064201683031639683/ 读写分离:利用最基础的mysql主从复制,事务性的查询无法分离出去(因为会导致数据不一致),这样就无法做到真正的读写分离,因为有些场景可能大部分都是事物性的读.解决方法: galera for mysql 强一致性. http://www.blogjava.net/amigoxie/archive/2014/12/24/421788.html

关于数据库的水平切分和垂直切分的一些概念(转)

垂直拆分 垂直拆分就是要把表按模块划分到不同数据库表中(当然原则还是不破坏第三范式),这种拆分在大型网站的演变过程中是很常见的.当一个网站还在很小的时候,只有小量的人来开发和维护,各模块和表都在一起,当网站不断丰富和壮大的时候,也会变成多个子系统来支撑,这时就有按模块和功能把表划分出来的需求.其实,相对于垂直切分更进一步的是服务化改造,说得简单就是要把原来强耦合的系统拆分成多个弱耦合的服务,通过服务间的调用来满足业务需求看,因此表拆出来后要通过服务的形式暴露出去,而不是直接调用不同模块的表,淘宝

MySQL 垂直切分(读书笔记整理)

1,垂直拆分 相对于水平拆分来说,垂直拆分比较容易实现一些,垂直拆分的意思是把数据库中不同的业务数据拆分到不同的数据库中.垂直拆分能很好的起到分散数据库压力的作用.业务模块不明晰,耦合(表关联)度比较高的系统不适合使用这种拆分方式. 有得用户查询积分快,有的用户查询自己的订单很快,但是查询自己的用户信息很慢,为什么? 2,垂直切分的优点 ◆ 数据库的拆分简单明了,拆分规则明确: ◆ 应用程序模块清晰明确,整合容易: ◆ 数据维护方便易行,容易定位: <版权所有,文章允许转载,但必须以链接方式注明

数据库优化-垂直切分以及在实际项目中的应用

我当年负责一个项目(中国电信BDC项目),购买的数据库硬件是P590小机组.通过压力测试后系统上线后,业务迅猛发展.小机的内存.CPU长期在98%上下徘徊.硬件虽然好,但是也扛不住业务的狂飙,应用服务器横向扩展相对比较容易,而数据库的升级相当的昂贵. 怎么办?当然首先是一堆的参数的调优和系统的调优.但是指标下降的不是特别理想: 怎么办?对系统进行合理拆分吧. 数据库拆分又分为垂直拆分和水平拆分,垂直拆分相对动静小一点.教育要从娃娃抓起,优化要从简单的抓起. 垂直切分,也可以称为纵向切分.我个人对

分布式系统「伸缩性」大招之——「水平&amp;垂直切分」详解

如果第二次看到我的文章,欢迎右侧扫码订阅我哟~  ?? 本文长度为5389字,建议阅读14分钟. 坚持原创,每一篇都是用心之作- 没想到这篇文章写了这么长,一时半会没消化完的话,可以收藏一下先. 这是「伸缩性」章节的第四篇,先给新来的小伙伴们简单回顾下前三篇的内容. 做「伸缩性」最重要的就是先做好「无状态」,如此才可以随心所欲的进行横向“扩展”,而不用担心在多个副本之间切换会产生错乱.<分布式系统关注点——「无状态」详解>聊的就是这个. 不过,就算做好了横向扩展,本质上还是一个“大程序”,只是

[转载] 数据库的垂直切分和水平切分

转载自http://blog.csdn.net/kobejayandy/article/details/8775138 数据切分可以是物理上的,对数据通过一系列的切分规则将数据分布到不同的DB服务器上,通过路由规则路由访问特定的数据库,这样一来每次访问面对的就不是单台服务器了,而是N台服务器,这样就可以降低单台机器的负载压力. 数据切分也可以是数据库内的,对数据通过一系列的切分规则,将数据分布到一个数据库的不同表中,比如将article分为article_001,article_002等子表,若

基于MyBatis的数据库切分框架,可实现数据的水平切分和垂直切分。 http://www.makersoft.org

https://github.com/makersoft/mybatis-shards MyBatis-Shards 专业的MyBatis数据库切分框架 MyBatis Shards简介 MyBatis Shards在实现方式上完全借鉴于Hibernate Shards,目前可以认为是Hibernate Shards的一个迁移版本. MyBatis Shards概述 MyBatis Shards采用无侵入性的方式,无需更改现有程序代码,只要根据现有业务编写合理的分区策略即可. 在多数据源事物管理

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

转自:http://blog.csdn.net/bluishglc/article/details/6161475 本文着重介绍sharding的基本思想和理论上的切分策略.关于更加仔细的实施策略和參考事例请參考我的还有一篇博文:数据库分库分表(sharding)系列(一) 拆分实施策略和演示样例演示 一.基本思想 Sharding的基本思想就要把一个数据库切分成多个部分放到不同的数据库(server)上,从而缓解单一数据库的性能问题. 不太严格的讲.对于海量数据的数据库,假设是由于表多而数据多