存储和数据库:
1. 数据存储类型
-
关系型数据库(RDBMS) :
- 特点:使用表格形式存储数据,支持SQL查询语言,提供强一致性保证。
- 示例:MySQL、PostgreSQL、Oracle、SQL Server。
- 适用场景:需要强一致性和复杂查询的应用,如金融系统、ERP系统。
-
NoSQL数据库:
-
特点:非关系型数据库,支持大规模分布式存储,通常用于处理海量数据和高并发场景。
-
分类
:
- 键值存储:如Redis、DynamoDB。
- 文档存储:如MongoDB、Couchbase。
- 列族存储:如HBase、Cassandra。
- 图数据库:如Neo4j、ArangoDB。
-
适用场景:需要高可扩展性和高性能的应用,如社交媒体、物联网。
-
-
内存数据库:
- 特点:数据存储在内存中,访问速度快,但数据持久性较差。
- 示例:Redis、Memcached。
- 适用场景:需要极高速访问的应用,如缓存、会话管理。
-
文件系统:
- 特点:以文件的形式存储数据,适用于存储大文件和非结构化数据。
- 示例:Linux文件系统、Windows文件系统。
- 适用场景:存储日志文件、图片、视频等。
2. 数据库管理系统(DBMS)
-
关系型数据库管理系统(RDBMS) :
- 事务管理:支持ACID(原子性、一致性、隔离性、持久性)事务。
- 查询优化:内置查询优化器,自动优化查询计划。
- 索引:支持多种索引类型,如B-tree、Hash索引。
- 示例:MySQL、PostgreSQL。
-
NoSQL数据库管理系统:
- 水平扩展:支持分布式部署,易于水平扩展。
- 灵活的模式:支持动态模式,无需预先定义表结构。
- 高可用性:支持数据复制和分区,提高系统的可用性和容错能力。
- 示例:MongoDB、Cassandra。
3. 事务处理
-
ACID特性:
- 原子性(Atomicity) :事务要么全部成功,要么全部失败。
- 一致性(Consistency) :事务执行前后,数据库必须保持一致状态。
- 隔离性(Isolation) :事务之间互不影响,每个事务都像在单独的系统中执行。
- 持久性(Durability) :事务一旦提交,其结果是永久性的,即使系统发生故障也不会丢失。
-
事务隔离级别:
- 读未提交(Read Uncommitted) :最低的隔离级别,允许读取未提交的数据。
- 读已提交(Read Committed) :只允许读取已提交的数据。
- 可重复读(Repeatable Read) :在一个事务中多次读取同一数据,结果始终相同。
- 序列化(Serializable) :最高的隔离级别,事务完全隔离,互不影响。
4. 索引
-
索引类型:
- B-tree索引:最常见的索引类型,适用于范围查询和精确查询。
- Hash索引:适用于精确查询,不支持范围查询。
- 全文索引:适用于全文搜索,如MySQL的FULLTEXT索引。
- 位图索引:适用于布尔值或少量值的列。
-
索引优化:
- 选择合适的索引类型:根据查询需求选择合适的索引类型。
- 避免过度索引:过多的索引会增加写操作的开销。
- 复合索引:使用多个列组合成一个索引,提高查询效率。
5. 查询优化
-
查询分析:
- EXPLAIN命令:使用EXPLAIN命令分析查询计划,找出性能瓶颈。
- 慢查询日志:记录执行时间较长的查询,进行优化。
-
优化技巧:
- 避免全表扫描:使用索引减少扫描范围。
- 减少数据传输量:只查询需要的列,避免使用SELECT *。
- 使用临时表:对于复杂的查询,可以使用临时表分步骤处理。
- 批处理:批量插入和更新数据,减少I/O操作。
6. 分布式数据库
-
分片(Sharding) :
- 水平分片:将数据分散到多个数据库实例中,每个实例负责一部分数据。
- 垂直分片:将不同的表或列分散到不同的数据库实例中。
-
数据复制:
- 主从复制:主数据库写入数据,从数据库读取数据,提高读取性能。
- 多主复制:多个主数据库都可以写入数据,提高写入性能。
-
一致性哈希:
- 原理:通过哈希算法将数据均匀分布到多个节点上,减少节点增减时的数据迁移量。
- 应用:适用于分布式缓存和分布式数据库。
7. 数据库设计
-
范式化:
- 第一范式(1NF) :消除重复列,确保每列都是原子的。
- 第二范式(2NF) :消除部分依赖,确保每个非主键列都完全依赖于主键。
- 第三范式(3NF) :消除传递依赖,确保每个非主键列都不依赖于其他非主键列。
-
反范式化:
- 目的:提高查询性能,减少连接操作。
- 方法:冗余数据,预计算结果,使用物化视图。
8. 数据库安全性
-
权限管理:
- 用户权限:为不同的用户分配不同的权限,限制对敏感数据的访问。
- 角色管理:通过角色管理用户权限,简化权限管理。
-
数据加密:
- 传输加密:使用SSL/TLS协议加密数据传输。
- 存储加密:对敏感数据进行加密存储,防止数据泄露。
-
审计日志:
- 记录操作:记录用户的操作日志,便于追踪和审计。
- 日志分析:定期分析日志,发现潜在的安全问题。