广告
返回顶部
首页 > 资讯 > 数据库 >数据库垂直拆分 水平拆分
  • 815
分享到

数据库垂直拆分 水平拆分

数据库垂直拆分水平拆分 2015-05-05 02:05:49 815人浏览 无得
摘要

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

数据库垂直拆分 水平拆分

数据库拆分

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

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

1.1 垂直拆分

        专库专用

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

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

1.2 水平拆分

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

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

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

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

2 拆分的处理难点

 

2.1 两种方式共同缺点

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

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

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

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

3 拆分原则

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

4 拆分方案

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

5 案例分析

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:按省份区县地区枚举
数据分配不一定均匀


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

您可能感兴趣的文档:

--结束END--

本文标题: 数据库垂直拆分 水平拆分

本文链接: https://www.lsjlt.com/news/6297.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • 数据库垂直拆分 水平拆分
    1 数据库拆分         当我们使用读写分离、缓存后,数据库的压力还是很大的时候,这就需要使用到数据库拆分了。                  数据库拆分简单来说,就是指通过某种特定的条件,按照某个维度,将我们存放在同一个数据库...
    99+
    2015-05-05
    数据库垂直拆分 水平拆分
  • MySQL 表的垂直拆分和水平拆分
    垂直拆分 垂直拆分是指数据表列的拆分,把一张列比较多的表拆分为多张表 通常我们按以下原则进行垂直拆分: 把不常用的字段单独放在一张表; 把text,blob等大字段拆分出来放在附表中; 经常组合查...
    99+
    2022-05-30
    MySQL MySQL 表垂直拆分 MySQL 表水平拆分
  • 数据库中的垂直拆分
    这期内容当中小编将会给大家带来有关数据库中的垂直拆分介绍,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。垂直切分的概念垂直拆分是根据数据库里面的数据表的相关性进行拆分,比如...
    99+
    2022-10-18
  • MySQL垂直拆分和水平拆分的优缺点和共同点总结
    数据的拆分(Sharding)根据其拆分分规则的类型,可以分为两种拆分模式。一种是按照不同的表(或者Schema)来切分到不同的数据库(主机)之上,这种切可以称之为数据的垂直(纵向)拆分; 另外一种则是根据...
    99+
    2022-10-18
  • 数据库中的水平拆分是什么
    数据库中的水平拆分是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。垂直拆分后遇到单机瓶颈,可以使用水平拆分。相对于垂直拆分...
    99+
    2022-10-18
  • mysql垂直拆分是什么
    今天就跟大家聊聊有关mysql垂直拆分是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、概念垂直拆分是指数据列的分割,将列多的表分割成多个表。表格的记录虽然不多,但字段长,表格...
    99+
    2023-06-15
  • mysql数据水平拆分怎么实现
    MySQL的数据水平拆分可以通过以下几种方式来实现: 分区(Partitioning):MySQL支持分区表,可以将表的数据按照...
    99+
    2023-10-27
    mysql
  • mysql中水平拆分指的是什么
    这篇文章主要介绍了mysql中水平拆分指的是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。mysql水平拆分1、说明水平拆分是通过某种战略将数据单片存储,单片存储器内的单...
    99+
    2023-06-15
  • 怎么理解MySQL垂直和水平切分
    这篇文章主要介绍“怎么理解MySQL垂直和水平切分”,在日常操作中,相信很多人在怎么理解MySQL垂直和水平切分问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么理解MySQ...
    99+
    2022-10-19
  • mysql中怎么实现水平分表和垂直分表
    本篇文章为大家展示了mysql中怎么实现水平分表和垂直分表,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 什么是数据库分区? 数据库分区是一种物理数据库设计技术...
    99+
    2022-10-18
  • Mysql中怎么实现水平分表与垂直分表
    本篇文章为大家展示了Mysql中怎么实现水平分表与垂直分表,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。水平分表:如上图所示:另外三张表表结构是一样的  ...
    99+
    2022-10-18
  • Android RecyclerView实现水平、垂直方向分割线
    android RecyclerView不像过去的ListView那样随意的设置水平方向的分割线,如果要实现RecyclerView的水平/垂直分割线,则需要继承自RecyclerView.ItemDecoration重写getItemOf...
    99+
    2023-05-30
    android recyclerview 分割线
  • 数据库中​ 为什么需要拆分表
    小编给大家分享一下数据库中 为什么需要拆分表,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!数据库拆分表可分为水平拆分和垂直拆分,...
    99+
    2022-10-18
  • MySQL垂直切分和水平切分概念和优缺点介绍
    数据的切分(Sharding)根据其切分规则的类型,可以分为两种切分模式。一种是按照不同的表(或者Schema)来切分到不同的数据库(主机)之上,这种切可以称之为数据的垂直(纵向)切分;另外一种则是根据表中...
    99+
    2022-10-18
  • MySQL实现数据炸裂拆分(类似Hive的explode函数的拆分数组功能)
    MySQL实现数据炸裂拆分(类似Hive的"explode"函数的拆分数组功能) 需求背景 背景描述 ​ 在Hive中,"explode"函数用于将数组类型的列拆分为多行,以便对数组中的每个元素进行处...
    99+
    2023-09-20
    mysql hive 数据库 大数据
  • css实现div垂直水平居中常用方法分享
    本篇内容主要讲解“css实现div垂直水平居中常用方法分享”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“css实现div垂直水平居中常用方法分享”吧!方法一:利...
    99+
    2022-10-19
  • MYSQL 一行数据拆分成多行数据
    -- WH 拆分成多行 数据 20230519 SELECT * FROM (         SELECT SKU,Primary_Warehouse, SUBSTRING_INDEX(SUBSTRING_...
    99+
    2023-09-01
    数据库 mysql
  • 如何实现MySQL底层优化:数据表的水平和垂直分割策略
    如何实现MySQL底层优化:数据表的水平和垂直分割策略,需要具体代码示例引言:在大型应用场景下,MySQL数据库经常面临着海量数据的存储和查询压力。为了解决这个问题,MySQL提供了数据表的分割策略,包括水平分割(Horizontal Pa...
    99+
    2023-11-08
    MySQL 数据表 底层优化
  • Oracle数据行拆分多行的示例分析
    小编给大家分享一下Oracle数据行拆分多行的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!单行拆分如果表数据只有一行,...
    99+
    2022-10-18
  • Pandas数据分析之批量拆分/合并Excel
    目录前言一、假造数据二、程序演示 1、将一个大Excel等份拆成多个Excel2、合并多个小Excel到一个大Excel总结前言 笔者最近正在学习Pandas数据分析,将自...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作