我的编程空间,编程开发者的网络收藏夹
学习永远不晚

数据库垂直拆分 水平拆分

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

数据库垂直拆分 水平拆分

数据库垂直拆分 水平拆分

        当我们使用读写分离、缓存后,数据库的压力还是很大的时候,这就需要使用到数据库拆分了。
        
        数据库拆分简单来说,就是指通过某种特定的条件,按照某个维度,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面以达到分散单库(主机)负载的效果。 

        切分模式: 垂直(纵向)拆分、水平拆分。

1.1 垂直拆分

        专库专用

        一个数据库由很多表的构成,每个表对应着不同的业务,垂直切分是指按照业务将表进行分类,分布到不同的数据库上面,这样也就将数据或者说压力分担到不同的库上面,如下图:
        
优点:
        1. 拆分后业务清晰,拆分规则明确。
        2. 系统之间整合或扩展容易。
        3. 数据维护简单。

缺点:
        1. 部分业务表无法join,只能通过接口方式解决,提高了系统复杂度。
        2. 受每种业务不同的限制存在单库性能瓶颈,不易数据扩展跟性能提高。
        3. 事务处理复杂。

1.2 水平拆分

        垂直拆分后遇到单机瓶颈,可以使用水平拆分。相对于垂直拆分的区别是:垂直拆分是把不同的表拆到不同的数据库中,而水平拆分是把同一个表拆到不同的数据库中。

        相对于垂直拆分,水平拆分不是将表的数据做分类,而是按照某个字段的某种规则来分散到多个库之中,每个表中包含一部分数据。简单来说,我们可以将数据的水平切分理解为是按照数据行的切分,就是将表中 的某些行切分到一个数据库,而另外的某些行又切分到其他的数据库中,主要有分表,分库两种模式,如图:

        
优点:
        1. 不存在单库大数据,高并发的性能瓶颈。
        2. 对应用透明,应用端改造较少。     
        3. 按照合理拆分规则拆分,join操作基本避免跨库。
        4. 提高了系统的稳定性跟负载能力。

缺点:
        1. 拆分规则难以抽象。
        2. 分片事务一致性难以解决。
        3. 数据多次扩展难度跟维护量极大。
        4. 跨库join性能较差。

 

2.1 两种方式共同缺点

        1. 引入分布式事务的问题。
        2. 跨节点Join 的问题。
        3. 跨节点合并排序分页问题。

2.2 针对数据源管理,目前主要有两种思路:

        A. 客户端模式,在每个应用程序模块中配置管理自己需要的一个(或者多个)数据源,直接访问各个 数据库,在模块内完成数据的整合。 
        优点:相对简单,无性能损耗。   
        缺点:不够通用,数据库连接的处理复杂,对业务不够透明,处理复杂。

       B. 通过中间代理层来统一管理所有的数据源,后端数据库集群对前端应用程序透明;   
        优点:通用,对应用透明,改造少。   
        缺点:实现难度大,有二次转发性能损失。

        1. 尽量不拆分,架构是进化而来,不是一蹴而就。(SOA)
        2. 最大可能的找到最合适的切分维度。
        3. 由于数据库中间件对数据Join 实现的优劣难以把握,而且实现高性能难度极大,业务读取  尽量少使用多表Join -尽量通过数据冗余,分组避免数据垮库多表join。
        4. 尽量避免分布式事务。
        5. 单表拆分到数据1000万以内。

 范围、枚举、时间、取模、哈希、指定等

5.1 场景一

建立一个历史his系统,将公司的一些历史个人游戏数据保存到这个his系统中,主要是写入,还有部分查询,读写比约为1:4;由于是所有数据的历史存取,所以并发要求比较高; 

分析:
历史数据
写多都少
越近日期查询越频繁?
什么业务数据?用户游戏数据
有没有大规模分析查询?
数据量多大?
保留多久?
机器资源有多少?

方案1:按照日期每月一个分片
带来的问题:1.数据热点问题(压力不均匀)
方案2:按照用户取模,  --by Jerome 就这个比较合适了
带来的问题:后续扩容困难
方案3:按用户ID范围分片(1-1000万=分片1,xxx)
带来的问题:用户活跃度无法掌握,可能存在热点问题

5.2 场景二

建立一个商城订单系统,保存用户订单信息。

分析:
电商系统
一号店或京东类?淘宝或天猫?
实时性要求高
存在瞬时压力
基本不存在大规模分析
数据规模?
机器资源有多少?
维度?商品?用户?商户?

方案1:按照用户取模,
带来的问题:后续扩容困难

方案2:按用户ID范围分片(1-1000万=分片1,xxx)
带来的问题:用户活跃度无法掌握,可能存在热点问题

方案3:按省份地区或者商户取模
数据分配不一定均匀

5.3 场景3

上海公积金,养老金,社保系统

分析:
社保系统
实时性要求不高
不存在瞬时压力
大规模分析?
数据规模大
数据重要不可丢失
偏于查询?

方案1:按照用户取模,
带来的问题:后续扩容困难

方案2:按用户ID范围分片(1-1000万=分片1,xxx)
带来的问题:用户活跃度无法掌握,可能存在热点问题

方案3:按省份区县地区枚举
数据分配不一定均匀


数据库问题解决后,应用面对的新挑战就是拆分应用等

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

数据库垂直拆分 水平拆分

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

数据库垂直拆分 水平拆分

1 数据库拆分         当我们使用读写分离、缓存后,数据库的压力还是很大的时候,这就需要使用到数据库拆分了。                  数据库拆分简单来说,就是指通过某种特定的条件,按照某个维度,将我们存放在同一个数据库中的数据分散存放到多个数
数据库垂直拆分 水平拆分
2015-05-05

MySQL 表的垂直拆分和水平拆分

垂直拆分垂直拆分是指数据表列的拆分,把一张列比较多的表拆分为多张表通常我们按以下原则进行垂直拆分:把不常用的字段单独放在一张表;把text,blob等大字段拆分出来放在附表中;经常组合查询的列放在一张表中;垂直拆分更多时候就应该在数据表设计
2022-05-30

MySQL垂直分库,水平分库,垂直分表,水平分表

之前经常被问道这些分库分表的概念,只是大概知道,但是具体如何定义的,问什么这么定义还是不太理解,今天对着数据表中的数据沉思的时候,突然间醒悟,原来这些概念非常好理解,而且可以说水平和垂直这两个词用得恰到好处,非常形象地帮助我们理解它们。

彻底搞清分库分表(垂直分库,垂直分表,水平分库,水平分表)

一般来说,在系统设计阶段就应该根据业务耦合松紧来确定垂直分库,垂直分表方案,在数据量及访问压力不是特别大的情况,首先考虑缓存、读写分离、索引技术等方案。若数据量极大,且持续增长,再考虑水平分库水平分表方案。

mysql垂直拆分是什么

今天就跟大家聊聊有关mysql垂直拆分是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、概念垂直拆分是指数据列的分割,将列多的表分割成多个表。表格的记录虽然不多,但字段长,表格
2023-06-15

数据拆分妙计:垂直分割,让数据库查询更流畅

垂直分割:提升数据库查询性能的妙计
数据拆分妙计:垂直分割,让数据库查询更流畅
2024-03-10

mysql数据水平拆分怎么实现

MySQL的数据水平拆分可以通过以下几种方式来实现:分区(Partitioning):MySQL支持分区表,可以将表的数据按照某个规则分割成多个分区存储在不同的磁盘上。可以按照范围、列表、哈希等方式进行分区。分区可以提高查询性能,减少索引大
2023-10-27

《数据库垂直分割的未来趋势:拆分之风,浩浩荡荡》

随着数据量的快速增长,数据库垂直分割正变得越来越普遍。垂直分割可以将数据表拆分成多个更小的表,从而提高查询速度并减少存储空间。
《数据库垂直分割的未来趋势:拆分之风,浩浩荡荡》
2024-02-12

《数据库垂直分割的终极奥义:拆分之术,妙不可言》

数据库垂直分割是一种将数据表按照不同的列进行拆分的方式,它可以提高数据库的性能和可维护性。本文将探讨垂直分割的原理、方法和注意事项,并通过一些示例来说明如何进行垂直分割。
《数据库垂直分割的终极奥义:拆分之术,妙不可言》
2024-02-12

《数据库垂直分割背后的逻辑:拆分智慧,化繁为简》

:数据库垂直分割是一种优化数据库性能和可扩展性的技术,它将表中的数据按照不同的逻辑主题或功能拆分成多个独立的表,从而减少数据冗余,提高查询效率。
《数据库垂直分割背后的逻辑:拆分智慧,化繁为简》
2024-02-13

《数据库垂直分割技巧大公开:拆分之道,各有千秋》

数据库垂直分割技巧是一门学问,其中包含了拆分之道和多种实现方法,掌握了这些技巧,可以有效地提高数据库的性能和可管理性。
《数据库垂直分割技巧大公开:拆分之道,各有千秋》
2024-02-12

《数据库垂直分割的成功案例:成功拆分,价值几何》

数据库垂直分割是一种常用的数据库设计技术,它可以将数据库中的数据按不同的业务功能或主题拆分成多个独立的数据库,从而提高数据库的性能、扩展性和安全性。本文将介绍一些数据库垂直分割的成功案例,并分析其带来的价值。
《数据库垂直分割的成功案例:成功拆分,价值几何》
2024-02-12

《数据库垂直分割的失败案例:拆分失败,痛定思痛》

数据库垂直分割是一种常用的优化技术,但操作不当很容易导致数据一致性问题。本文将通过一个真实的案例,展示垂直分割失败的后果,并给出相应的解决方案。
《数据库垂直分割的失败案例:拆分失败,痛定思痛》
2024-02-12

分库分表实战:新的挑战-千万级数据优化之垂直拆分

读写分离方案上线后,订单sql查询时间再一次稳定在了300ms以下,此时对数据的增删改操作会走主库,而读请求会走从库,通过读写分离大大提升了数据读的处理能力,但遗憾的是没办法提升主库写数据的能力。

分库分表实战:新的挑战—千万级数据优化之垂直拆分

垂直拆分其实分为垂直分库和垂直分表,我们这里指的是垂直分库,说白了就是由一个数据库拆分出来多个数据库,那么具体怎么拆分呢?

编程热搜

目录