关系型数据库一直以来是数据库的主导方向,并且在业界得到广泛应用。即使今天,仍占有很大比重。
为什么关系型数据库
发展历程
- 人工管理
- 文件系统
- 数据库管理系统(DBMS, DataBase Management System),按照某种数据模型来组织、存储和管理数据的仓库,分为网状数据库、层次数据库和关系型数据库。
网状模型
- 能直接描述现实世界
- 存储效率高
但
- 结构复杂
- 用户不易使用
- 访问程序设计复杂
层次模型
- 结构简单
- 查询效率高
- 可以提供较好的完整性支持
但
- 无法表示M:N关系
- 插入、删除限制多
- 遍历子节点必须经过父节点
- 访问程序设计 复杂
关系模型
- 实体及实体间的联系都通过二维表结构表示
- 可以方便表示M:N关系
- 数据访问路径对用户透明
虽然
- 关联查询效率不够高
- 关系必须规范化
这些缺点也催生了近年来非关系型数据库的发展,不过这是后文了。
关键技术与实际应用
一条SQL语句,在用户发给服务端请求后由服务端对RDBMS发出。数据库管理系统在收到SQL后首先依次进行词法句法和语义解析;然后优化,选择最优路径;之后交给Executor完成操作。Executor与数据库的数据文件和日志文件完成操作,同时可用性、一致性等要求也在此阶段保证,
在实际应用中,面临着流量大、流量突增和稳定性需求等问题。
- 流量大:单机数据容量有限,单节点读写容易成为瓶颈
- 业务数据进行水平拆分
- 代理层进行分片路由
- 流量突增,活动期间流量暴增,需要短期扩容、代理连接池等操作
- 扩容DB物理节点数量
- 利用影子表进行压测
- 稳定性&可靠性
- 3AZ高可用(比如备用机房,不同机房间通过日志进行同步,代理进行读写分离、限流等操作,实时监控风险等)
- HA(High Avalibility)管理,快速识别异常节点宕机问题,快速修复,热加载等。
其他
数据库整体理解还是
- 内存速度快。所以会有缓存,内存池等操作。
- 不同数据库底层架构不一样,及用户需求多样化。所以需要sql语句进行词法句法语义分析后进入Executor,最后再与数据库交互。
- 数据库的事务引擎不同于存储引擎,进行索引查找、数据组织存储等操作,而是保证事务的原子性的操作,保证了数据库的可用性。针对比如多并发、多版本控制、读写冲突、一致性读的问题。