`

数据库垂直拆分与水平拆分概念

 
阅读更多

垂直拆分

垂直拆分就是要把表按模块划分到不同数据库表中(当然原则还是不破坏第三范式),这种拆分在大型网站的演变过程中是很常见的。当一个网站还在很小的时候,只有小量的人来开发和维护,各模块和表都在一起,当网站不断丰富和壮大的时候,也会变成多个子系统来支撑,这时就有按模块和功能把表划分出来的需求。其实,相对于垂直切分更进一步的是服务化改造,说得简单就是要把原来强耦合的系统拆分成多个弱耦合的服务,通过服务间的调用来满足业务需求看,因此表拆出来后要通过服务的形式暴露出去,而不是直接调用不同模块的表,淘宝在架构不断演变过程,最重要的一环就是服务化改造,把用户、交易、店铺、宝贝这些核心的概念抽取成独立的服务,也非常有利于进行局部的优化和治理,保障核心模块的稳定性

垂直拆分:单表大数据量依然存在性能瓶颈

 

 

水平拆分

上面谈到垂直切分只是把表按模块划分到不同数据库,但没有解决单表大数据量的问题,而水平切分就是要把一个表按照某种规则把数据划分到不同表或数据库里。例如像计费系统,通过按时间来划分表就比较合适,因为系统都是处理某一时间段的数据。而像SaaS应用,通过按用户维度来划分数据比较合适,因为用户与用户之间的隔离的,一般不存在处理多个用户数据的情况,简单的按user_id范围来水平切分

 

通俗理解:水平拆分行,行数据拆分到不同表中, 垂直拆分列,表数据拆分到不同表中

 

垂直与水平联合切分

由上面可知垂直切分能更清晰化模块划分,区分治理,水平切分能解决大数据量性能瓶颈问题,因此常常就会把两者结合使用,这在大型网站里是种常见的策略

 

 
案例:
mysql为例,简单购物系统暂设涉及如下表:
1.产品表(数据量10w,稳定)
2.订单表(数据量200w,且有增长趋势)
3.用户表 (数据量100w,且有增长趋势)
以mysql为例讲述下水平拆分和垂直拆分,mysql能容忍的数量级在百万静态数据可以到千万
 
垂直拆分:
解决问题:
表与表之间的io竞争
不解决问题:
单表中数据量增长出现的压力
方案:
把产品表和用户表放到一个server上
订单表单独放到一个server上
 
水平拆分:
解决问题:
单表中数据量增长出现的压力
不解决问题:
表与表之间的io争夺
 
方案:
用户表通过性别拆分为男用户表和女用户表
订单表通过已完成和完成中拆分为已完成订单和未完成订单
产品表 未完成订单放一个server上
已完成订单表盒男用户表放一个server上
女用户表放一个server上(女的爱购物)


 
  • 大小: 30.7 KB
分享到:
评论

相关推荐

    一分钟掌握数据库垂直拆分

    本文将详细介绍“一分钟掌握数据库垂直拆分”的相关内容,帮助读者快速了解垂直拆分的基本概念、应用场景及其实现原理。 #### 二、水平拆分与垂直拆分概述 在数据库设计中,当面对海量数据时,通常有两种方法来...

    Mycat数据库中间件技术总结

    Mycat是一种流行的数据库中间件技术,支持分库分表,主要用于解决数据库水平拆分的问题。下面是对Mycat数据库中间件技术的总结: 数据库切分理论 数据库切分是指将大型数据库分成多个小型数据库的过程。这种技术...

    4_表拆分(1).zip

    - 数据库分区的概念和与表拆分的关系,分区是表拆分的一种高级形式,可以进一步优化查询性能。 - 数据库设计和重构的指导,如何在不影响业务的情况下进行表拆分。 - 对于分布式数据库和云环境下的表拆分策略,可能会...

    数据库分库分表(sharding)的技术

    #### 一、基本概念与原理 **数据库分库分表(Sharding)**是一种常见的数据库优化技术,主要用于解决大规模数据存储和高并发访问带来的性能瓶颈问题。它通过将单一数据库中的数据分散到多个数据库或表中,从而提高...

    银行业中的分布式数据库架构转型.pdf

    其次是分布式数据库的水平拆分,即每个微服务拥有独立的数据库存储。这种拆分方式对于数据库存储提出了新的挑战,因为随着微服务的容器数量增加,数据库的存储与处理能力需要同步提升,否则数据库将成为整个架构中的...

    计算机软件-商业源码-数据库原理及应用系统开发.zip

    - 数据库垂直拆分和水平拆分:根据业务需求调整架构,提高系统的可扩展性。 在压缩包中的“数据库原理及应用系统开发”文件中,可能包含以上各个方面的实例代码、设计文档、教程或案例研究,对于深入理解和实践...

    4-Sharding-JDBC分库分表.pdf

    分库分表的概念、垂直拆分与水平拆分、分片策略和分片算法是Sharding-JDBC中核心的知识点,下面将对这些概念进行详细的解释。 ### 分库分表概念 分库分表是为了解决随着业务数据量的不断增长,单库单表模式面临的...

    数据库设计经验

    例如,采用微服务架构时,数据库可能需要进行垂直拆分(按业务功能划分)或水平拆分(按数据量划分)。此外,良好的文档记录、命名规范和数据库版本控制也是保证数据库可维护性的关键。 在设计数据库时,性能优化也...

    mysql MySQL数据库开发优化与管理维护

    - **通过拆分,提高表的访问效率**:介绍水平分割和垂直分割的方法。 - **逆规范化**:通过逆规范化降低数据冗余,提高查询速度。 - **使用冗余统计表**:建立统计表来减轻查询负担。 - **选择更合适的表类型**:...

    三级数据库样卷与标准答案.pdf

    【并行数据库拆分】 10. 对于整表扫描,范围划分(Range Partitioning)通常最有效,因为它允许并行处理每个分区。 【数据库系统的高可用性】 11. 保证数据库系统的连续运行不仅依赖于软件,还需要备份、恢复策略...

    分布式数据库架构及企业实践-基于Mycat中间件.zip

    这种水平扩展方式相比垂直扩展(提升单台服务器硬件配置)更具成本效益。 在企业实践中,采用Mycat构建分布式数据库需要考虑以下几点: 1. 数据分片设计:根据业务特点选择合适的分片策略,确保数据均匀分布,避免...

    三级数据库样卷与标准答案.doc

    【全国计算机等级考试三级数据库技术】考试主要涉及数据库系统的基础理论、设计与管理等方面的知识。以下是对样卷中部分题目涉及知识点的详细解释: 1. 数据库系统:数据库系统是包含计算机硬件、软件以及数据库的...

    java数据库面试题目

    ### Java数据库面试题目详解 #### 一、数据库三大范式详解 **1....- **定义**:第一范式要求表中的每个字段必须是...通过对这些概念的理解和掌握,可以帮助开发者更好地设计和管理数据库,提高应用程序的性能和可靠性。

    mysql数据库高薪面试题

    - **垂直拆分与水平拆分**:理解这两种不同的数据库扩展方式及其优缺点。 6. **复制与集群** - **主从复制**:理解复制的工作原理,配置和故障恢复。 - **MySQL集群**:了解NDB Cluster和Group Replication,...

    图书管理系统MySQL数据库

    随着图书数量和用户量的增长,数据库需要具备良好的扩展性,如垂直分割(将表拆分到多个服务器)和水平分割(将数据分布到多个表)。 11. **错误处理和日志记录**: 为了追踪和解决可能出现的问题,系统应记录...

    关系数据库规范化理论

    常见的模式分解方法包括水平分解和垂直分解。在进行模式分解时,需要遵循一定的规则,确保分解后的模式满足特定的范式要求。此外,还需要考虑分解后的模式集合是否能够保持函数依赖和键的特性。 #### 四、数据依赖...

    数据库笔记.

    在数据库表的设计方面,笔记强调了行和列的概念,其中列也称为字段或属性,是表中的垂直结构,用于表示实体的特征,而行(记录)是表中的水平结构,代表一个实体或对象。数据类型的选择对于数据库的存储效率和准确性...

    TSharding用于蘑菇街交易平台的分库分表组件

    分库分表,即数据库垂直拆分和水平拆分。垂直拆分是根据业务逻辑将相关的表聚合到一起,形成不同的数据库,降低单个数据库的复杂性;水平拆分则是将一张大表的数据分散到多个表或数据库中,以减小单表的数据量,提高...

Global site tag (gtag.js) - Google Analytics