后端学习笔记 | 存储和数据库

77 阅读5分钟

存储和数据库:

1. 数据存储类型
  1. 关系型数据库(RDBMS)

    • 特点:使用表格形式存储数据,支持SQL查询语言,提供强一致性保证。
    • 示例:MySQL、PostgreSQL、Oracle、SQL Server。
    • 适用场景:需要强一致性和复杂查询的应用,如金融系统、ERP系统。
  2. NoSQL数据库

    • 特点:非关系型数据库,支持大规模分布式存储,通常用于处理海量数据和高并发场景。

    • 分类

      • 键值存储:如Redis、DynamoDB。
      • 文档存储:如MongoDB、Couchbase。
      • 列族存储:如HBase、Cassandra。
      • 图数据库:如Neo4j、ArangoDB。
    • 适用场景:需要高可扩展性和高性能的应用,如社交媒体、物联网。

  3. 内存数据库

    • 特点:数据存储在内存中,访问速度快,但数据持久性较差。
    • 示例:Redis、Memcached。
    • 适用场景:需要极高速访问的应用,如缓存、会话管理。
  4. 文件系统

    • 特点:以文件的形式存储数据,适用于存储大文件和非结构化数据。
    • 示例:Linux文件系统、Windows文件系统。
    • 适用场景:存储日志文件、图片、视频等。
2. 数据库管理系统(DBMS)
  1. 关系型数据库管理系统(RDBMS)

    • 事务管理:支持ACID(原子性、一致性、隔离性、持久性)事务。
    • 查询优化:内置查询优化器,自动优化查询计划。
    • 索引:支持多种索引类型,如B-tree、Hash索引。
    • 示例:MySQL、PostgreSQL。
  2. NoSQL数据库管理系统

    • 水平扩展:支持分布式部署,易于水平扩展。
    • 灵活的模式:支持动态模式,无需预先定义表结构。
    • 高可用性:支持数据复制和分区,提高系统的可用性和容错能力。
    • 示例:MongoDB、Cassandra。
3. 事务处理
  1. ACID特性

    • 原子性(Atomicity) :事务要么全部成功,要么全部失败。
    • 一致性(Consistency) :事务执行前后,数据库必须保持一致状态。
    • 隔离性(Isolation) :事务之间互不影响,每个事务都像在单独的系统中执行。
    • 持久性(Durability) :事务一旦提交,其结果是永久性的,即使系统发生故障也不会丢失。
  2. 事务隔离级别

    • 读未提交(Read Uncommitted) :最低的隔离级别,允许读取未提交的数据。
    • 读已提交(Read Committed) :只允许读取已提交的数据。
    • 可重复读(Repeatable Read) :在一个事务中多次读取同一数据,结果始终相同。
    • 序列化(Serializable) :最高的隔离级别,事务完全隔离,互不影响。
4. 索引
  1. 索引类型

    • B-tree索引:最常见的索引类型,适用于范围查询和精确查询。
    • Hash索引:适用于精确查询,不支持范围查询。
    • 全文索引:适用于全文搜索,如MySQL的FULLTEXT索引。
    • 位图索引:适用于布尔值或少量值的列。
  2. 索引优化

    • 选择合适的索引类型:根据查询需求选择合适的索引类型。
    • 避免过度索引:过多的索引会增加写操作的开销。
    • 复合索引:使用多个列组合成一个索引,提高查询效率。
5. 查询优化
  1. 查询分析

    • EXPLAIN命令:使用EXPLAIN命令分析查询计划,找出性能瓶颈。
    • 慢查询日志:记录执行时间较长的查询,进行优化。
  2. 优化技巧

    • 避免全表扫描:使用索引减少扫描范围。
    • 减少数据传输量:只查询需要的列,避免使用SELECT *。
    • 使用临时表:对于复杂的查询,可以使用临时表分步骤处理。
    • 批处理:批量插入和更新数据,减少I/O操作。
6. 分布式数据库
  1. 分片(Sharding)

    • 水平分片:将数据分散到多个数据库实例中,每个实例负责一部分数据。
    • 垂直分片:将不同的表或列分散到不同的数据库实例中。
  2. 数据复制

    • 主从复制:主数据库写入数据,从数据库读取数据,提高读取性能。
    • 多主复制:多个主数据库都可以写入数据,提高写入性能。
  3. 一致性哈希

    • 原理:通过哈希算法将数据均匀分布到多个节点上,减少节点增减时的数据迁移量。
    • 应用:适用于分布式缓存和分布式数据库。
7. 数据库设计
  1. 范式化

    • 第一范式(1NF) :消除重复列,确保每列都是原子的。
    • 第二范式(2NF) :消除部分依赖,确保每个非主键列都完全依赖于主键。
    • 第三范式(3NF) :消除传递依赖,确保每个非主键列都不依赖于其他非主键列。
  2. 反范式化

    • 目的:提高查询性能,减少连接操作。
    • 方法:冗余数据,预计算结果,使用物化视图。
8. 数据库安全性
  1. 权限管理

    • 用户权限:为不同的用户分配不同的权限,限制对敏感数据的访问。
    • 角色管理:通过角色管理用户权限,简化权限管理。
  2. 数据加密

    • 传输加密:使用SSL/TLS协议加密数据传输。
    • 存储加密:对敏感数据进行加密存储,防止数据泄露。
  3. 审计日志

    • 记录操作:记录用户的操作日志,便于追踪和审计。
    • 日志分析:定期分析日志,发现潜在的安全问题。