架构设计之数据库拆分原则

数据拆分前其实是要首先做准备工作的,然后才是开始数据拆分,我先讲拆分前需要做的事情:

  1. 第一步:采用分布式缓存redis、memcached等降低对数据库的读操作。
  2. 第二步:如果缓存使用过后,数据库访问量还是非常大,可以考虑数据库读、写分离原则。
  3. 第三步:当我们使用读写分离、缓存后,数据库的压力还是很大的时候,这就需要使用到数据库拆分了。

数据库拆分原则:就是指通过某种特定的条件,按照某个维度,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面以达到分散单库(主机)负载的效果。

第一步,首选垂直拆分

一个数据库由很多表的构成,每个表对应着不同的业务,垂直切分是指按照业务将表进行分类,分布到不同的数据库上面,这样也就将数据或者说压力分担到不同的库上面 。

比如淘宝中期开始的数据库端按照业务垂直拆分:按照业务交易数据库、用户数据库、商品数据库、店铺数据库等进行拆分。

优点:

1. 拆分后业务清晰,拆分规则明确。

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

3. 数据维护简单。

缺点:

1. 部分业务表无法join,只能通过接口方式解决,提高了系统复杂度。

2. 受每种业务不同的限制存在单库性能瓶颈,不易数据扩展跟性能提高。

3. 事务处理复杂。

第二步:其次水平拆分

水平拆分的典型场景就是大家熟知的分库分表。

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

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

分库分表需要涉及到对应的SQL路由规则主库备库等,例如:淘宝设计了一套TDDL来解决这些问题,应用端只需配置对应的规则即可,对应用端的没有任何侵入的设计。

水平拆分,总之,一般先分库,如果分库后查询仍然慢,于是按照分库的思想开始做分表的工作数据库采用分布式数据库(所有节点的数据加起来才算是整体数据),文件系统采用分布式文件系统任何强大的单一服务器都满足不了大型系统持续增长的业务需求,数据库读写分离随着业务的发展最终也将无法满足需求,需要使用分布式数据库及分布式文件系统来支撑。

总结,数据库拆分原则:


1.优先考虑缓存降低对数据库的读操作。

2.再考虑读写分离,降低数据库写操作。

3.最后开始数据拆分,切分模式: 垂直(纵向)拆分、水平拆分。

4.首先考虑按照业务垂直拆分。

5.再考虑水平拆分:先分库(设置数据路由规则,把数据分配到不同的库中)

6.最后再考虑分表。

你可能也喜欢:

  1. 「优知学院」淘宝技术架构的前世今生(上)
  2. 「优知学院」淘宝架构的前世今生(下)
  3. 阿里P8架构师谈:架构设计经验汇总
  4. 阿里P8架构师谈:双11秒杀系统如何设计?
  5. 阿里P8架构师谈:分布式架构系统拆分原则、需求、微服务拆分步骤
  6. 阿里P8架构师谈:分布式架构设计(文章合集)

陈睿:架构设计之数据库拆分六大原则相关推荐

  1. 架构设计器_MySQL:数据库结构优化、高可用架构设计、数据库索引优化

    一.SQL查询优化(重要) 1.1 获取有性能问题SQL的三种方式 通过用户反馈获取存在性能问题的SQL: 通过慢查日志获取存在性能问题的SQL: 实时获取存在性能问题的SQL: 1.1.2 慢查日志 ...

  2. MySQL:数据库结构优化、高可用架构设计、数据库索引优化

    一.SQL查询优化(重要) 1.1 获取有性能问题SQL的三种方式 通过用户反馈获取存在性能问题的SQL: 通过慢查日志获取存在性能问题的SQL: 实时获取存在性能问题的SQL: 1.1.2 慢查日志 ...

  3. 数据库架构设计——分布式数据库设计

    摘要 现在互联网应用已经普及,数据量不断增大.对淘宝.美团.百度等互联网业务来说,传统单实例数据库很难支撑其性能和存储的要求,所以分布式架构得到了很大发展.一定要认识到数据库技术正在经历一场较大的变革 ...

  4. mysql性能结构优化原理_MySQL性能管理及架构设计(二):数据库结构优化、高可用架构设计、数据库索引优化...

    一.数据库结构优化(非常重要) 1.1 数据库结构优化目的 1.减少数据冗余:(数据冗余是指在数据库中存在相同的数据,或者某些数据可以由其他数据计算得到),注意,尽量减少不代表完全避免数据冗余: 2. ...

  5. ef mysql 优化_MySQL性能管理及架构设计(二):数据库结构优化、高可用架构设计、数据库索引优化...

    一.数据库结构优化(非常重要) 1.1 数据库结构优化目的 1.减少数据冗余:(数据冗余是指在数据库中存在相同的数据,或者某些数据可以由其他数据计算得到),注意,尽量减少不代表完全避免数据冗余: 2. ...

  6. MySQL性能管理及架构设计(二):数据库结构优化、高可用架构设计、数据库索引优化...

    一.数据库结构优化(非常重要) 1.1 数据库结构优化目的 1.减少数据冗余:(数据冗余是指在数据库中存在相同的数据,或者某些数据可以由其他数据计算得到),注意,尽量减少不代表完全避免数据冗余: 2. ...

  7. linux数据泵导入command not found_MySQL:数据库结构优化、高可用架构设计、数据库索引优化...

    一.SQL查询优化(重要) 1.1 获取有性能问题SQL的三种方式 通过用户反馈获取存在性能问题的SQL: 通过慢查日志获取存在性能问题的SQL: 实时获取存在性能问题的SQL: 1.1.2 慢查日志 ...

  8. 面向对象设计之魂(六大原则)

    [版权申明] 非商业目的注明出处可自由转载 博文地址:https://blog.csdn.net/ShuSheng0007/article/details/87901626 出自:shusheng00 ...

  9. mysql性能调优与架构设计 51cto_MySQL 数据库性能优化之表结构优化

    很多人都将 数据库设计范式 作为数据库表结构设计"圣经",认为只要按照这个范式需求设计,就能让设计出来的表结构足够优化,既能保证性能优异同时还能满足扩展性要求.殊不知,在N年前被奉 ...

最新文章

  1. java md5算法,JAVA实现MD5算法
  2. c语言将源文件拷贝到目的文件,C语言编译过程 简介和详解
  3. PaddlePaddle应用于百度视觉技术的工程实践
  4. 工业以太网交换机的安全问题详解
  5. 【转】Dynamics 365中的事件框架与事件执行管道(Event execution pipeline)
  6. 使用 Lightbox 2 和 JavaScript 构建出色的图片库
  7. ArcGIS Server中各种服务详解
  8. java安装错误咋办_win7系统安装Java出现错误的解决方法
  9. 报表如何集成 echarts 官网示例图
  10. 轻量级模型:MobileNet V2
  11. OpenCV 禁止吸烟图像拼接
  12. 护理自考本科科目计算机应用基础,护理自考本科考哪些科目
  13. USB3.0:VL817Q7-C0的LAYOUT指南(三)
  14. Linux系统学习环境搭建 - 跟小智一起学网络(3)
  15. 菜狗杯Misc打不开的图wp
  16. 如何免ROOT,实现安卓设备远程控制?
  17. 人工智能发展到GPT4经历了什么,从专家系统到机器学习再到深度学习,从大模型到现在的GPT4
  18. 什么是电子合同,如何签订电子合同?
  19. 2021年软考信息安全工程师下午真题(考生回忆版)
  20. java统计图表代码_java swing下用jfreechart开发图表统计情况

热门文章

  1. 实现一个无法被继承的C++类
  2. nyoj_66_分数拆分_201312012122
  3. CouchDB与Couchbase:区别何在,Membase又将如何?
  4. IBM软件服务创新运用 提升市民生活质量
  5. 浅谈“三层结构”原理与用意(转帖)
  6. 用bat-抓取android日志
  7. java 守护线程 run_java守护线程(后台线程)
  8. mysql schema是什么_MySQL中information_schema是什么
  9. Linux下打印调试管理
  10. python函数在传参的时候,到底在传些什么?