数据库优化学习之分库分表

注:本篇为学习笔记,欢迎批评指正。

  1. 为什么数据库需要优化?
随着数据量的增长,CURD操作时间开销大。
IO,MEM,CPU资源是有限的
数据处理能力受到了影响
  1. 数据库的优化方法有哪些策略?
数据库连接数,如开源数据库mysql一般支持500-700连接
数据库服务器自身的资源有限
数据库量越来越大
  • 查询越来越慢怎么办?
索引--要有开销的(空间换时间)--【btree和b+tree的区别】
分区--冷热数据区分--【业务熟悉】
读写分离--读和写服务器分开 MYSQL主从同步--
加硬件--向上扩展(专业名词)
分库分表--减轻每张表的数据量--【怎么分】
缓存--redis数据库,QPS-10W+ --【和mangoDB的区别,各自应用场景,各自的问题,还能应用别的场景吗?】
专业数据库--大数据(hadoop,hbase),ES
  • 分库分表
    在其他条件不变情况下,如何通过分库分表策略,提高数据库的并发量,提高数据库的查询效率,提高用户感知度?
垂直切分:
功能上:指的是按功能不同,切分为不同的数据库;
表上面:指的是将表切分为主表和其他表。
优点:划分规则规则简单,明了;管理方便,整合容易。
缺点:查询需要关联其他表;事务的处理复杂;维护性收到限制;对于交易量很大且访问频繁的主表,没有好的办法。


表切分

  • 水平拆分(对单表进行拆分)
按照主键取值范围进行拆分;例如用户表数据量1500W,可以拆分为三张500W的表
按照时间进行拆分;例如拆分为12个张表,每月一张
按照取模进行拆分;
按照枚举值;例如主表某字段取值固定的,如地名。

优点:
库内进行关联操作;
切分规则定好,很难遇见瓶颈;(单数据库服务,单实例;单数据库服务,多实例;多数据服务,多实例);
应用程序改动较少;

缺点:
复杂度提高了,维度难度增加了;
抽象出一个切分规则,很难;
没有解决耦合性,后续拆分很困难;
Union


  • 水平拆分和垂直拆分是如何解压的?
    垂直拆分:通过对功能拆分,转移数据库的压力
    水平拆分:通过相同的表、库、服务共同分担压力。

联合拆分

  • 联合切分存在的问题?
垂直切分和水平切分优缺点,都要继承
架构十分复杂,维护成本高。
  • 怎么管理数据库资源
每个应用程序直接管理自己的数据库资源(多个),直接访问各个数据库,在模块里进行数据整合;
通过中间代理层(数据库中间件)进行数据库的管理。
数据库中间件 mycat
cobar--mycat
原因
BIO--NIO 
BIO(客户端向服务器端发送请求,服务器端就会起线程)
NIO同步非阻塞(客户端向服务器端发送请求,到多路复用器,有IO请求时,)
AIO异步非阻塞
结果进行整合,group by,order by 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值