数据库与集群

数据库与集群

1、数据库集群

概念:数据库集群,顾名思义,就是利用至少两台或者多台数据库服务器,构成一个虚拟单一数据库逻辑映像,像单数据库系统那样,向客户端提供透明的数据服务。

数据库集群两个关键定义:
(1)两台或者多台数据库服务器:如果只有一台数据库服务器是不能称其为集群的。
(2)透明的服务:集群向客户端提供的服务与单机系统向客户端提供的服务,从通讯协议上保持二进制兼容。

数据库集群 往往是 同构的系统 ,要求集群各节点都具有 相同的操作系统 和数据库 系统版本 ,甚至 补丁包的版本 也要求保持一致 。如数据库集群分为主库和从库,将读写分开,其中集群可以处理故障自动切换、负载均衡等问题。
在这里插入图片描述

2、数据库中间件

在这里插入图片描述
中间件封装指的是独立一套系统出来,实现读写操作分离和数据库服务器连接的管理。

数据库中间件的方式具备的特点是:

  • 能够支持多种编程语言。
  • 数据库中间件要支持完整的 SQL 语法和数据库服务器的协议(例如,MySQL 客户端和服务器的连接协议)。
  • 所有的数据库操作请求都要经过中间件,中间件的性能要求也很高。
  • 数据库主从切换对业务服务器无感知,数据库中间件可以探测数据库服务器的主从状态。例如,向某个测试表写入一条数据,成功的就是主机,失败的就是从机。

3、垂直分表&分库

3.1 垂直分表

垂直分表定义:把一张表按列分为多张表,多张表通过主键进行关联,从而组成完整的数据。分表之后,每张表的结构都不相同。

垂直分表并不会把列平分到2个表中,而是会将一些重要的字段单独剥离成小表,把剩余的不太重要的字段放在大表中。
比如,把查询、排序时需要的字段,高频访问的小字段放在小表
而把低频访问字段以及一些大字段放在大表中

通常按以下原则进行垂直拆分:

  • 把不常用的字段单独放在一张表;
  • 把text,blob等大字段拆分出来放在附表中;
  • 经常组合查询的列放在一张表中;

垂直分表带来的性能提升主要集中在热门数据的操作效率上,而且磁盘争用情况减少。

3.2 垂直分库

读写分离分散了数据库读写操作的压力,但没有分散存储压力,当数据量达到千万甚至上亿条的时候,单台数据库服务器的存储能力会成为系统的瓶颈,主要体现在这几个方面:

  • 数据量太大,读写的性能会下降,即使有索引,索引也会变得很大,性能同样会下降。
  • 数据文件会变得很大,数据库备份和恢复需要耗费很长时间。
  • 数据文件越大,极端情况下丢失数据的风险越高(例如,机房火灾导致数据库主备机都发生故障)。

基于上述原因,单个数据库服务器存储的数据量不能太大,需要控制在一定的范围内。为了满足业务数据存储的需求,就需要将存储分散到多台数据库服务器上。

如果按照业务分库,用户、商品、订单三个业务模块分在不同的服务器上存储,能够分散存储和访问压力,但同时也带来了新的问题:

  • 不同数据库的表不能join连接;
  • 事务问题:原本在同一个数据库中不同的表可以在同一个事务中修改,业务分库后,表分散到不同的数据库中,无法通过事务统一修改。
  • 成本备份数据问题。

分库,不同库的表肯定是存储在不同的数据库服务器里的。

4.水平分表&分库

同一业务的单表数据也会达到单台数据库服务器的处理瓶颈。例如,淘宝的几亿用户数据,如果全部存放在一台数据库服务器的一张表中,肯定是无法满足性能要求的,此时就需要对单表数据进行拆分。​

再次分库?但是从业务角度分析,目前情况已经无法再次垂直分库。只能进行水平分表和分库操作。

单表进行切分后,是否要将切分后的多个表分散在不同的数据库服务器中,可以根据实际的切分效果来确定,并不强制要求单表切分为多表后一定要分散到不同数据库服务器中:

  • 单表切分为多表后,新的表即使在同一个数据库服务器中,也可能带来可观的性能提升,如果性能能够满足业务要求,是可以不拆分到多台数据库服务器的,毕竟在上面业务分库的内容看到业务分库也会引入很多复杂性的问题;
  • 如果单表拆分为多表后,单台服务器依然无法满足性能要求,那就不得不再次进行业务分库的设计了。

水平切分:
将用户按一定规则(按id哈希)分组,并把该组用户的数据存储到一个数据库分片中,即一个sharding,这样随着用户数量的增加,只要简单地配置一台服务器即可,原理图如下:
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值