• 数据库与集群了解


    转自:https://blog.csdn.net/dong_pongkk999/article/details/17529671

    https://cloud.tencent.com/developer/article/1512049,https://blog.csdn.net/sinat_33718563/article/details/119893934

    https://www.51cto.com/article/583857.html

    1.数据库集群 

    数据库集群有的具有单份数据集 ,(有的具有两份或多份相似的数据集 ,有的具有两份或多份 实时一致的数据集?一个集群不应该只保存一份数据吗?往外提供相同的功能) ;

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

     2.数据库中间件

     

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

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

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

    3.垂直分表&分库

    https://zhuanlan.zhihu.com/p/98392844

    3.1 垂直分表

    垂直分表定义:将一个表按照字段分成多表,每个表存储其中一部分字段

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

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

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

    3.2 垂直分库

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

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

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

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

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

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

    4.水平分表&分库

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

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

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

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

    水平切分:

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

    看起来还是有问题,比如一张表是先考虑垂直分表还是水平分表,还是两者可以同时进行?那如果同时进行,一张表就被分成了2*n个,假设垂直拆分为2个,n是水平拆分的个数。那这几张表要分库存储吗?如果分库存储的话是水平分库还是垂直分库呢?太多疑问了。。。

  • 相关阅读:
    mysql "The user specified as a definer ('root'@'%') does not exist" 问题
    mysql添加Federated引擎问题
    D7经典脚本[multi/handler]
    redhat7.4安装vertica-9.1.0教程
    批量在当前目录下所有的文件中添加指定字段
    mysql 水平分表技术
    linux普通用户提权
    两步完成利用procdump64+mimikatz获取win用户密码
    hibernate中对象的三种状态分析
    Hibernate 入门案例
  • 原文地址:https://www.cnblogs.com/BlueBlueSea/p/16527516.html
Copyright © 2020-2023  润新知