垂直拆分
垂直拆分就是要把表按模块划分到不同数据库表中(当然原则还是不破坏第三范式),这种拆分在大型网站的演变过程中是很常见的。当一个网站还在很小的时候,只有小量的人来开发和维护,各模块和表都在一起,当网站不断丰富和壮大的时候,也会变成多个子系统来支撑,这时就有按模块和功能把表划分出来的需求。其实,相对于垂直切分更进一步的是服务化改造,说得简单就是要把原来强耦合的系统拆分成多个弱耦合的服务,通过服务间的调用来满足业务需求看,因此表拆出来后要通过服务的形式暴露出去,而不是直接调用不同模块的表,淘宝在架构不断演变过程,最重要的一环就是服务化改造,把用户、交易、店铺、宝贝这些核心的概念抽取成独立的服务,也非常有利于进行局部的优化和治理,保障核心模块的稳定性
垂直拆分:单表大数据量依然存在性能瓶颈
水平拆分
上面谈到垂直切分只是把表按模块划分到不同数据库,但没有解决单表大数据量的问题,而水平切分就是要把一个表按照某种规则把数据划分到不同表或数据库里。例如像计费系统,通过按时间来划分表就比较合适,因为系统都是处理某一时间段的数据。而像SaaS应用,通过按用户维度来划分数据比较合适,因为用户与用户之间的隔离的,一般不存在处理多个用户数据的情况,简单的按user_id范围来水平切分
通俗理解:水平拆分行,行数据拆分到不同表中, 垂直拆分列,表数据拆分到不同表中
垂直与水平联合切分
由上面可知垂直切分能更清晰化模块划分,区分治理,水平切分能解决大数据量性能瓶颈问题,因此常常就会把两者结合使用,这在大型网站里是种常见的策略
案例:
以mysql为例,简单购物系统暂设涉及如下表:
1.产品表(数据量10w,稳定)
2.订单表(数据量200w,且有增长趋势)
3.用户表 (数据量100w,且有增长趋势)
以mysql为例讲述下水平拆分和垂直拆分,mysql能容忍的数量级在百万静态数据可以到千万
垂直拆分:
解决问题:
表与表之间的io竞争
不解决问题:
单表中数据量增长出现的压力
方案:
把产品表和用户表放到一个server上
订单表单独放到一个server上
水平拆分:
解决问题:
单表中数据量增长出现的压力
不解决问题:
表与表之间的io争夺
方案:
用户表通过性别拆分为男用户表和女用户表
订单表通过已完成和完成中拆分为已完成订单和未完成订单
产品表 未完成订单放一个server上
已完成订单表盒男用户表放一个server上
女用户表放一个server上(女的爱购物)
相关推荐
总结来说,基于MyBatis的数据库拆分和读写分离实现,涉及到对MyBatis框架的深入理解和扩展,包括对SqlSessionTemplate的改造、数据库拆分策略的设计(如垂直拆分和水平拆分的一致性哈希)、以及读写分离的路由机制。...
垂直拆分是要把表按模块划分到不同数据库表中(当然原则还是不破坏第三范式),这种拆分在大型网站的演变过程中是很常见的。当一个网站还在很小的时候,只有小量的人来开发和维护,各模块和表都在一起,当网站...
综上所述,水平拆分和垂直拆分都是有效提升数据库性能的手段。特别是在流量大、数据量大的情况下,采用垂直拆分能够显著提高系统效率。通过合理规划拆分策略,如将访问频率高的字段放在主表,可以最大化利用内存缓存...
Mycat 是一种数据库中间件,位于 Java 应用程序和数据库之间,主要功能包括读写分离、数据分片(垂直拆分和水平拆分)、多数据源整合等。下面是 Mycat 的详细搭建过程: 一、 Mycat 概述 Mycat 是一种数据库中间件...
本文将详细介绍数据库中的分表分库技术,特别是垂直拆分和水平拆分两种主要方式。 #### 一、分表分库概述 分表分库是指将一个大的数据表或数据库拆分成多个较小的数据表或数据库的过程。这种做法能够有效提升...
数据库拆分分为垂直拆分和水平拆分。垂直拆分是根据功能模块将表分布到不同数据库,例如将群组相关表与照片相关表分开,这种方式简单但可能无法完全解决问题。相比之下,水平拆分是将同一表的数据分割到多个数据库中...
MySQL 数据库在面对大规模数据存储时,为了保持良好的性能和可管理性,常常需要对表进行拆分,即垂直拆分和水平拆分。这两种拆分策略分别针对数据的不同维度进行优化。 **垂直拆分** 垂直拆分是基于列的拆分方式,...
本篇笔记主要探讨了MySQL数据库的拆分技术,包括CAP原则、可扩展性原则以及垂直拆分和水平拆分的实践。 首先,CAP原则是分布式系统设计的基础,它指出任何分布式系统只能同时满足一致性(C)、可用性(A)和分区...
它通过将数据水平或垂直拆分到多个数据库节点上,从而提高系统的并发处理能力和存储能力。您提供的 demo 使用了 MyBatis 这一流行的 ORM 框架,实现了数据的水平切分和垂直切分。 在水平切分中,您可能使用了诸如 ...
分布式MySQL数据库中间件是应对大数据量、高并发场景下的解决方案,它通过将单一数据库扩展到多个物理节点,实现数据的水平或垂直拆分,以提高系统的处理能力和可用性。在这个主题中,我们将深入探讨分布式MySQL...
Mycat是一种流行的数据库中间件技术,支持分库分表,主要用于解决数据库水平拆分的问题。下面是对Mycat数据库中间件技术的总结: 数据库切分理论 数据库切分是指将大型数据库分成多个小型数据库的过程。这种技术...
水平拆分是将同一表的数据分散到多个数据库中,而垂直拆分则是根据业务功能将数据库中的不同表分配到不同的数据库。 **阶段七:数据库的水平/垂直拆分** 最后,数据库的拆分是应对大规模并发的关键策略。水平拆分...
常见的拆分方式包括水平拆分和垂直拆分。 ##### 水平拆分 水平拆分是指将一张大表按照某种规则拆分成多张表,每张表包含原表的一部分数据。这种拆分方式能够有效减少单一表的数据量,从而提高查询速度。 - **拆分...
通过水平拆分、垂直拆分和分布式数据库等方式,可以提高数据库的容灾能力和扩展性。 数据库扩展性 数据库扩展性是互联网架构转型中的另一个主要挑战。随着业务的高速发展,数据库的扩展性变得尤为重要。阿里巴巴的...
7. **微服务架构下的数据库设计**:探讨在微服务架构中,如何进行数据库的拆分和治理,避免数据孤岛和数据一致性问题。 8. **实时与大数据处理**:介绍流处理技术(如Apache Flink、Kafka)和批处理工具(如Hadoop...
分布式数据库通过水平拆分和垂直拆分来管理数据,前者将同一表的数据分散到多个数据库,后者是将不同表分配到不同数据库。这种架构适用于数据量庞大、高并发和高性能需求的场景。 【数据库集群】 数据库集群是由多...
mysql分库分表,水平拆分和垂直拆分,水平拆分后如何路由 MySQL 索引使用的注意事项 left join,right join,inner join 说说分库与分表设计 分库与分表带来的分布式困境与应对之策(如何解决分布式下的分库分表,...
在数据拆分方面,分布式数据库采用垂直拆分和水平拆分两种策略。垂直拆分根据业务相关性将表结构拆分为多个独立的表,而水平拆分则是根据数据量和增长速度将单个表的数据分布到多个表中。分库分表(Sharding)通过...