文档章节

了解数据切分

BryceLoski
 BryceLoski
发布于 2017/03/11 16:14
字数 1117
阅读 75
收藏 0
  • 何为数据(系统)切分?

    • 简单来说,就是通过某个特定的条件,按照某个维度,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面以达到分散单库(主机)负载的效果。
    • 切分模式 :
      • 垂直(纵向)切分。
      • 水平切分。
  • 垂直切分

    一个数据库由多个表构成,每个表对应着不同的业务,垂直切分是按照业务将表进行分类,分布到不同的数据上面,这样也就将数据访问的压力分担到不同的多个库上。如下图:

                                    

          优点:

                ---- 拆分后业务清晰,拆分原则明确。

                ---- 系统之间整合或扩展容易。                               

                ---- 数据维护简单。

        缺点:

                ---- 部分业务表无法进行 JOIN 操作,只能通过接口方式解决,提高了系统的复杂度。

                ---- 受某种业务不同的限制存在单库性能瓶颈,不易于数据扩展和性能提高。

                ---- 事务处理复杂,涉及到分布式事务问题。

  • 水平切分

    相对于垂直切分来讲,水平切分不是将表表的数据做分类,而是按照某个字段的某种规则来分散到多个库中,每个库的每个表中都包含一部分数据。简单来说,我们可以将数据的水平切分理解成按照数据行进行切分,比如 1 ~ 100W 行在 database1 库中的 table 表,200W ~ 300W 行在 database2 库中的 table 表 (这是采用分库的方式),主要有分表,分库两种模式。如图:

         

        优点 :

                ---- 不存在单库的大数据,高并发的性能瓶颈。

                ---- 对应用透明,应用端改造较少。

                ---- 按照合理的拆分规则拆分,JOIN 操作基本避免垮库。

                ---- 提高了系统的稳定性跟负载能力。

        缺点 :

                ---- 拆分规则难以抽象。

                ---- 分片事务一致性难以解决。

                ---- 数据多次扩展难度跟维护量较大。

                ---- 跨库 JOIN 性能差。

  • 切分的处理难点

    • 引入了分布式事务问题
    • 跨节点 JOIN 问题
    • 跨节点合并排序分页问题
    • 针对数据源管理目前主要有两种思路

      • 客户端模式,在每个应用中配置管理自己需要的一个或多个数据源,直接访问指定的各个数据库,在应用内完成数据的整合。
        • 优点:相对简单,无性能损耗。
        • 缺点 :不够通用,数据库连接的处理复杂,对业务不透明,处理复杂。
      • 通过中间代理层来统一管理所有的数据源,后端数据库集群对应用透明
        • 优点 : 通用,对应用透明,改造少。
        • 缺点 : 实现难度大,既然是代理就有二次转发的性能损失。
    • 切分原则

      •  尽量不切分,架构是进化来的,不是一蹴而就的。
      • 最大可能的找到最合适的切分维度。
      • 由于数据库中间件对于数据的 JOIN 实现的优劣难以把握,而且实现高性能难度大,业务读取尽量少使用多表 JOIN
      • 尽量通过冗余,分组避免跨库的多表 JOIN
      • 尽量避免分布式事务
      • 单表切分数据 1000W 以内。

 

© 著作权归作者所有

上一篇: 了解 MyCat
下一篇: 认识 NIO
BryceLoski
粉丝 66
博文 106
码字总数 81975
作品 1
东城
程序员
私信 提问
数据库分库分表(sharding)系列(一) 拆分实施策略和示例演示

本文原文连接: http://blog.csdn.net/bluishglc/article/details/7696085 ,转载请注明出处!本文着重介绍sharding切分策略,如果你对数据库sharding缺少基本的了解,请参考我另一篇从基础理论...

bluishglc
2012/06/27
0
0
一分钟了解负载均衡的一切

负载均衡(Load Balance)是分布式系统架构设计中必须考虑的因素之一,它通常是指,将请求/数据【均匀】分摊到多个操作单元上执行,负载均衡的关键在于【均匀】。常见互联网分布式架构如上,...

达尔文
2016/09/16
52.3K
9
HBase原理–所有Region切分的细节都在这里了

了解 网易云 : 网易云官网:https://www.163yun.com/ 新用户大礼包:https://www.163yun.com/gift 网易云社区:https://sq.163yun.com/...

wangyiyungw
2018/05/09
0
0
Java之品优购部署_day02(2)

1.1 MyCat分片-海量数据存储解决方案 1.1.1 什么是分片 简单来说,就是指通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面,以达到分散单台设备负载的...

我是小谷粒
2018/07/12
0
0
[IBM DW] 使用 Hibernate Shards 进行切分

当关系数据库试图在一个单一表中存储数 TB 的数据时,总性能经常会降低。显然,对所有数据编索引不仅对于读而且对于写都很耗时。因为 NoSQL 数据商店尤其适合存储大型数据(如 Google 的 Bi...

红薯
2010/10/19
829
1

没有更多内容

加载失败,请刷新页面

加载更多

NIO基于长度域的报文在Netty下的解码

1, 先复习一下粘包/拆包 1.1, 粘包/拆包的含义 TCP是个“流”协议, 并不了解上层业务数据的具体含义, 它会根据TCP缓冲区的实际情况进行包的划分,所以在业务上认为,一个完整的包可能会被TCP...

老菜鸟0217
今天
8
0
从零开始搭建spring-cloud(2) ----ribbon

在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的。Spring cloud有两种服务调用方式,一种是ribbon+restTemplate,另一种是feign。 其实我们已经在上...

Vincent-Duan
今天
17
0
get和post的区别?

doGet:路径传参。效率高,安全性差(get的传送数据量有限制,不能大于2Kb) doPOST:实体传参。效率低,安全性好 建议: 1、get方式的安全性较Post方式要差些,包含机密信息的话,建议用Pos...

花无谢
昨天
4
0
当谈论迭代器时,我谈些什么?

当谈论迭代器时,我谈些什么? 花下猫语:之前说过,我对于编程语言跟其它学科的融合非常感兴趣,但我还说漏了一点,就是我对于 Python 跟其它编程语言的对比学习,也很感兴趣。所以,我一直...

豌豆花下猫
昨天
14
0
10天学Python直接做项目,我做了这5件事

初学者如何尽快上手python? 市面上关于如何学python的资料很多,但是讲的都太复杂。 我就是很简单的几句话,从小白到开发工程师,我只做了五件事。 我觉得任何商业计划书如果不能用几句话讲...

Python派森
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部