关于垂直切分的粒度
垂直切分的粒度指的是在做垂直切分时允许几级的关联表放在一个shard里.这个问题对应用程序和sharding实现有着很大的影响.
关联打断地越多,则受影响的join操作越多,应用程序为此做出的妥协就越大,但单表的路由会越简单,与业务的关联性会越小,就越容易使用统一机制处理.在此方向上的极端方案是:打断所有连接,每张表都配有路由规则,可以使用统一机制或框架自动处理.比如amoeba这样的框架,它的路由能且仅能通过SQL的特征(比如某个表的id)进行路由.
反之,若关联打断地越少,则join操作的受到的限制就小,应用程序需要做出的妥协就越小,但是表的路由就会变复杂,与业务的关联性就越大,就越难使用统一机制处理,需要针对每个数据请求单独实现路由.在此方向上的极端方案是:所有表都在一个shard里,也就是没有垂直切分,这样就没有关联被打断.当然这是非常极端的,除非整个数据库很简单,表的数量很少.
实际的粒度掌控需要结合“业务紧密程度”和“表格数据量”两个因素综合考虑,一般来说:
- 若划归到一起的表格关系紧密,且数据量并不大,增速也非常缓慢,则适宜放在一个shard里,不需要再进行水平切分;
- 若划归到一起的表格数据量巨大且增速迅猛,则势必要在垂直切分的基础上再进行水平切分,水平切分就意味着原单一shard会被细分成多个更小的shard,每一个shard存在一个主表(即会以该表ID进行散列的表)和多个相之相关的关联表。
总之,垂直切分的粒度在两个相反的方向上呈现优势与劣势并存并相互博弈的局面.架构师需要做的是结合项目的实际情况在两者之间取得收益最大化的平衡.
相关推荐
**Sharding** 可以分为两种主要类型:垂直切分(Vertical Sharding)和水平切分(Horizontal Sharding)。 ##### 垂直切分(Vertical Sharding) 垂直切分是指按照不同的表或者表组来划分数据。这种切分方式适用于...
垂直切分(Vertical Sharding),指的是根据表的功能或者业务模块,将不同的表分布在不同的数据库中。这种切分方式适用于表之间关联性较弱的场景,可以有效地降低单个数据库的压力,提高系统的整体性能。 **特点:*...
3、使用 Sharding-JDBC 垂直切分 4、使用 Sharding-JDBC 操作公共表 5、使用使用 Sharding-JDBC 读写分离 三、Sharding-Proxy 1、什么是 Sharding-Proxy 2、使用 Sharding-Proxy 分库分表 3、使用 Sharding-Proxy ...
##### 垂直切分(Vertical Sharding) 垂直切分是指根据数据的业务属性或逻辑关系,将数据库中的表按照一定的规则拆分到不同的数据库服务器上。这种切分方式适用于业务模块相对独立、表间关联较少的场景。例如,一...
MySQL的水平和垂直切分是数据库优化的重要策略,主要用于应对数据量大、访问压力高的情况。这两种切分方法都是为了提高数据库的性能和可扩展性。 **垂直切分**是根据表中的字段来划分,目的是减小单个表的大小和...
根据不同的切分策略,数据切分大致可以分为两大类:垂直切分(Vertical Sharding)和水平切分(Horizontal Sharding)。 ##### 1. 垂直切分(Vertical Sharding) 垂直切分指的是将不同类型的表或列分配到不同的...
数据切分主要有两种方式:行级切分(Horizontal Sharding)和列级切分(Vertical Sharding)。本文主要讨论行级切分,即根据数据的某个属性(如用户ID)将数据分配到不同的数据库或表。例如,在博客应用中,可以...
它允许开发人员对JDBC进行分片操作,从而实现对数据库进行水平切分。 Sharding JDBC在2015年9月发布,之后在2016年的3月、5月以及12月都有更新。目前它在Github上的star数量已经超过1000,显示出社区的关注和活跃度...
ShardingSphere(原名Sharding-JDBC)是由Apache软件基金会孵化的开源项目,它提供了数据库分片的功能,支持水平和垂直切分。ShardingJDBC作为一个轻量级的Java库,能够在不修改现有数据库架构和业务代码的情况下,...
**垂直与水平联合切分**结合了垂直切分和水平切分的优点,是一种更为灵活和高效的解决方案。例如,可以先按照功能模块将表进行垂直切分,然后再对某些高访问量的表进行水平切分。 - **优点**: - 兼顾了垂直切分和...
2. 垂直切分(Partitioning):垂直切分是根据表的列来分割数据。将相关的列放在一个分片上,不相关的列放在另一个分片上。这通常用于减少单个分片上的数据冗余和提高查询性能。 三、数据库切分的优势 1. 性能提升...
MongoDB Sharding 机制是 MongoDB 中的一种机制,用于将数据水平切分到不同的物理节点,以解决单机性能极限的问题。Sharding 可以利用上更多的硬件资源来解决单机性能极限的问题,并减小每个索引的体积,提高索引...
数据切分(Sharding)是一种用于水平扩展数据库的技术手段,旨在通过将数据分散到多个物理节点上来减轻单个数据库的负载压力,并提高整体系统的可靠性和可用性。具体来说,数据切分涉及以下几个关键步骤: 1. **...
接下来我们将深入探讨标题和描述中涉及的“sharding-proxy实现分表”这一主题。 ### 1. 分库分表介绍 分库分表是数据库水平扩展的一种常见策略,用于解决单表数据量过大导致的性能问题。随着业务的增长,数据量...
数据库切分主要包括两种类型:垂直切分(Vertical Sharding)和水平切分(Horizontal Sharding)。 - **垂直切分**:是指按照表的维度进行拆分,即将数据库中的表根据业务逻辑的不同划分到不同的数据库中。这种方式...
【标题】"spring-sharding-mybatis" 涉及到的是Spring Boot集成ShardingSphere(原ShardingJDBC)和MyBatis实现数据库分片的解决方案。这是一个在微服务架构中处理大数据量、高并发场景时,提升系统性能的重要技术。...
【标题】"sharding-jdbc按月分表样例"是一个关于使用Sharding-JDBC进行数据库分片的示例项目,旨在展示如何根据月份动态地将数据分散到不同的表中,以实现数据的水平扩展和负载均衡。Sharding-JDBC是阿里巴巴开源的...
ShardingJDBC是阿里巴巴开源的一款轻量级Java框架,它为数据库分片提供了一种解决方案。这个框架的主要目的是解决在大数据场景下,由于单表数据量过大导致的性能瓶颈问题。ShardingJDBC可以在不改变业务代码的情况下...