天天看点

把数据转换为在内存中Tree(树形结构)。_12数据库

把数据转换为在内存中Tree(树形结构)。_12数据库

1 知识点汇总

把数据转换为在内存中Tree(树形结构)。_12数据库

2 知识点详解

关系型数据库

  • Oracle
    • 功能强大,缺点贵
  • MySQL
    • 互联网行业中最流行的数据库
  • MariaDB
    • MySQL的分支,由开源社区维护
  • PostgreSQL
    • 类似于Oracle的多进程模型,可支持高并发的应用场景,几乎支持所有SQL标准,适合严格的企业应用场景

NoSQL(Not Only SQL)

  • Redis
    • 适用于数据变化快,数据大小可预测的场景
  • MongoDB
    • 基于分布式文件存储的数据库
    • 将数据存储为一个文档,数据结构由键值对组成
    • 适用于表结构不明确,数据结构不断发生变化的场景
    • 不适合有事务和复杂查询的场景
  • Hbase
    • 是在hdfs(Hadoop Distributed File System hadoop分布式文件系统)中分布式面向列的数据库,类似于Google的Bigtable
    • 可提供快速随机访问海量结构化数据,在表中由行排序,一个表中有多个列族,每个列族有任意数量的列
    • 依赖于hdfs,可以实现海量数据的可靠存储,适用于数据量大,写多读少,不需要复杂查询的场景
  • Cassandra
    • 高可靠大规模分布式存储系统
    • 支持分布是的结构化K-V存储
    • 以高可用为主要目标
    • 适合写多场景,简单查询,不适合数据统计
  • Pika
    • 提供大容量类Redis的存储服务
    • 兼容Redis的五种数据结构的大部分命令
    • 使用磁盘存储,解决Redis存储成本问题

NewSQL

  • TiDB
    • 开源分布式关系型数据库
    • 几乎完全兼容MySQL
    • 支持水平弹性扩展,ACID事务,标准SQL,MySQL语法和MySQL协议
    • 具有数据强一致性的高可用性
    • 既适合在线事务处理,也适合在线分析处理
  • OceanBase
    • 蚂蚁金服所有,满足金融级数据可靠性以及数据一致性要求的数据库系统
    • 以商业化不再开源

数据库范式

范式级别越高,对数据表要求的越严格

  • 第一范式(最低)
    • 要求表中的字段不可再拆分
  • 第二范式
    • 在满足第一范式的基础上,要求每条记录由主键唯一区分,记录中的所有属性都依赖与主键
  • 第三范式
    • 在满足第二范式的基础上,要求所有属性直接依赖于主键,不允许间接依赖
  • 巴斯-科德范式(一般满足至此即可)
    • 在满足第三范式的基础上,要求联合主键的各字段之间互不依赖

事务分类

  • 扁平事务:所有操作都在同一层次(日常使用最多).缺点:不能提交事物的某一部分
  • 带保存点的扁平事务:在事务中插入保存点,失败回滚时,可回滚至任意保存点,而不是回滚整个事务
  • 链事务:可看作上一事务的变种,事务提交时会将上下文隐式传递给下一个事务,事务失败时,回滚至最近的事务
  • 嵌套事务:由上层事务和子事务组成,类似树形结构.顶层事务负责逻辑处理,子事务负责具体操作.子事务提交后需等待上层事务提交才算完成,若上层事务回滚,则所有子事务回滚
  • 分布式事务:分布式环境中的扁平化事务
    • XA规范:保证强一致性的刚性事务方案
      • 两段式提交
        • 需要事务协调者保证,事务参与者都完成第一阶段的事务准备阶段.当都准备完成则通知事务参与者进行下一阶段事务.(类似于Java中的countdownlatch和cyclicbarruer)
        • 在一个进程发生故障时,会有较长时间的阻塞
      • 三段式提交
        • 增加PreCommit环节,减少两段式提交中的阻塞时间
    • TCC:满足最终一致性的柔性事务方案
      • 对每个操作都注册确认和补偿操作
      • try阶段:检测业务系统,预留资源
      • confirm阶段:确认提交
      • cancel阶段:业务执行错误时执行回滚,释放预留资源
    • 消息事务:消息一致性方案
      • 将本地操作与消息发送封装在一个事务中,保证本地操作与消息发送要么都成功,要么都失败
      • 下游应用收到收到消息执行对应操作

MySQL

把数据转换为在内存中Tree(树形结构)。_12数据库

索引

可大幅增加数据库的查询性能,适合读多写少的场景

代价:需要额外空间保存索引,插入更新删除时,由于更新索引增加额外的开销

  • 索引类型
    • 唯一索引
      • 索引列中的值唯一,允许出现空值
    • 主键索引
      • 特殊的唯一索引不允许出现空值
    • 普通索引
      • 索引列中的值不唯一
    • 联合索引
      • 多个列按顺序组成索引,相同列不同顺序为不同索引
    • 全文索引
      • 只能在char varchar text等类型使用
  • 索引实现
    • B-Tree
      • 最常用
    • R-Tree
      • 用于处理多维数据的数据结构,可对地理数据进行空间索引
    • Hash
      • 效率比B-Tree高,不支持范围查找,排序等功能
    • FullText
      • 适用于全文索引

MySQL调优

  1. 表结构与索引
  • 分库分表,读写分离
  • 为字段选择合适的数据类型
  • 将字段多的表分拣成多个表,增加中间表
  • 混合范式与反范式,适当冗余
  • 为查询创建必要索引,但避免滥用
  • 尽可能地是以哦那个NOT NULL
  1. SQL语句优化
  • 寻找最需要优化的语句:分析慢查询日志
    • 使用频繁或效率最低的
  • 利用查询工具:explain,profile
  • 避免使用SELECT *, 只取需要的列
  • 尽可能使用prepared statements
  • 使用索引扫描来排序
  1. MySQL参数优化
  2. 硬件及系统配置
从1到4优化成本增加,优化效果降低

考察点

  • 了解数据库的基本原理,数据库的特点
  • 理解数据库事务的ACID特性和隔离级别
  • 掌握常用的MySQL语句和常用函数
  • 了解MySQL数据库不同引擎多的特点以及不同类型的索引实现

3 面试题整理

  1. 数据库查询速度慢,如何优化?
  2. 什么情况会导致索引失效?
  3. 数据库事务有哪些特征?事务的隔离级别有哪几种?
  4. 如何对 SQL 语句进行优化?

继续阅读