数据库系统可分几型及其分类依据是什么?
- 内容介绍
- 文章标签
- 相关推荐
使用者痛点:在选择数据库程序时面临多种类型的混淆,不知道哪种数据库适合自己的业务需求?如何根据数据特性和使用场景选择一下?
一、关系型数据库程序
定义:以关系模型为基础。使用二维表格形式存储数据,通过SQL语言管理。
特点:
- 支持ACID事务特性
- 强大的查询能力,支持复杂查询和多表关联
- 严格的数据结构约束。确保数据完整性
- 适合处理结构化数据和复杂业务逻辑
典型代表:
- MySQL:开源免费,适用于中小规模公司级应用,如电商网站、CMS程序等。
- Oracle:公司级旗舰产品。支持高并发事务处理,很多地方都在用金融、政府领域。
- Microsoft SQL Server:.NET环境完善,与Windows服务器集成度高。说起来,
定义:不采用表格形式存储数据。而是使用键值对、文档、图形等灵活的数据结构。老实说,
- ✓ 适合处理非结构化/半结构化大规模海量高并发访问场景
- ✓ 高 性,可水平 满足云计算需求
- ✖ 不支持复杂事务,可能牺牲部分一致性
- ✖ 查询功能相对有限,缺乏SQL标准查询语言
- 主键不能取空值
- 在一个表中,任意两个不同记录都不能有相同的主键值
- 每张表最多只能有一个主键
- 在创建外键的时候,被参照字段必须已经存在且被参照字段必须是被参照表中的主键或唯一约束。
- 被创建外键的一端称为从表,被参照的一端称为主表。
- 外键所在列允许取空值。
- 外键可以重复。
- B+树具有较低空间占用率
- B+树查询效率更稳定
| 分类标准 | 常见代表产品 | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 键值存储 | Redis,Memcached | ||||||||||||||||||||||||
| 列族存储 | Cassandra,HBase | ||||||||||||||||||||||||
| 面向文档 | MongoDB,CouchDB | ||||||||||||||||||||||||
| 图形 | Neo4j。ArangoDB |
| B树 | B+树 |
|---|---|
| 每个节点包含关键字还有指向子节点指针 | 每个节点仅包含关键字 |
| 节点中包含的就是向实际记录行地址 | 需要额外维护一个叶子节点来保存实际记录 |
❗️为什么MySQL选择B+树作为索引?
InnoDB与MyISAM
| InnoDB | MyISAM |
|---|---|
| 支持事务安全 | 不支持事务安全 |
| 支持行级别锁定 | 支持全局及行级别所定 |
| 支持外部约束及自动提交机制 | 不支持 |
ACID 特性
ACID 是事务 的四大特征: 原子性 、一致性 、隔离性 和 持久化。
| ACID 特征 | 作用 |
|---|---|
| 原子性 | 要么全部成功执行;要么全部失败回滚, |
| 一致性 | 数据从一种状态变成另一种状态后始终保持正确。 |
| 隔离性 | 提供了串行读取以防止各种竞争条件问题。 |
| 持久化 | 即使发生崩溃也不会导致任何已提交写入丢失。 |
乐观 vs 悲观并发控制
悲观并发控制
假设会发生冲突所以会先获取排他式资源访问权限。- MySQL 中默认使用 SELECT FOR UPDATE 和 SELECT LOCK IN SHARE MODE。- 比较消耗资源但比较简单直接。
假设不会发生冲突所以允许多个线程同时操作相同资源。- 在更新之前检查是否已经有人修改过该记录了。不过,- 比较轻量但如果冲突很多则效率降低。
✍️ 参考资料:
以上内容整理自公开技术资料 最终更新时间: 📅 2月 日
🎯🔍 欢迎补充纠错!
使用者痛点:在选择数据库程序时面临多种类型的混淆,不知道哪种数据库适合自己的业务需求?如何根据数据特性和使用场景选择一下?
一、关系型数据库程序
定义:以关系模型为基础。使用二维表格形式存储数据,通过SQL语言管理。
特点:
- 支持ACID事务特性
- 强大的查询能力,支持复杂查询和多表关联
- 严格的数据结构约束。确保数据完整性
- 适合处理结构化数据和复杂业务逻辑
典型代表:
- MySQL:开源免费,适用于中小规模公司级应用,如电商网站、CMS程序等。
- Oracle:公司级旗舰产品。支持高并发事务处理,很多地方都在用金融、政府领域。
- Microsoft SQL Server:.NET环境完善,与Windows服务器集成度高。说起来,
定义:不采用表格形式存储数据。而是使用键值对、文档、图形等灵活的数据结构。老实说,
- ✓ 适合处理非结构化/半结构化大规模海量高并发访问场景
- ✓ 高 性,可水平 满足云计算需求
- ✖ 不支持复杂事务,可能牺牲部分一致性
- ✖ 查询功能相对有限,缺乏SQL标准查询语言
- 主键不能取空值
- 在一个表中,任意两个不同记录都不能有相同的主键值
- 每张表最多只能有一个主键
- 在创建外键的时候,被参照字段必须已经存在且被参照字段必须是被参照表中的主键或唯一约束。
- 被创建外键的一端称为从表,被参照的一端称为主表。
- 外键所在列允许取空值。
- 外键可以重复。
- B+树具有较低空间占用率
- B+树查询效率更稳定
| 分类标准 | 常见代表产品 | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 键值存储 | Redis,Memcached | ||||||||||||||||||||||||
| 列族存储 | Cassandra,HBase | ||||||||||||||||||||||||
| 面向文档 | MongoDB,CouchDB | ||||||||||||||||||||||||
| 图形 | Neo4j。ArangoDB |
| B树 | B+树 |
|---|---|
| 每个节点包含关键字还有指向子节点指针 | 每个节点仅包含关键字 |
| 节点中包含的就是向实际记录行地址 | 需要额外维护一个叶子节点来保存实际记录 |
❗️为什么MySQL选择B+树作为索引?
InnoDB与MyISAM
| InnoDB | MyISAM |
|---|---|
| 支持事务安全 | 不支持事务安全 |
| 支持行级别锁定 | 支持全局及行级别所定 |
| 支持外部约束及自动提交机制 | 不支持 |
ACID 特性
ACID 是事务 的四大特征: 原子性 、一致性 、隔离性 和 持久化。
| ACID 特征 | 作用 |
|---|---|
| 原子性 | 要么全部成功执行;要么全部失败回滚, |
| 一致性 | 数据从一种状态变成另一种状态后始终保持正确。 |
| 隔离性 | 提供了串行读取以防止各种竞争条件问题。 |
| 持久化 | 即使发生崩溃也不会导致任何已提交写入丢失。 |
乐观 vs 悲观并发控制
悲观并发控制
假设会发生冲突所以会先获取排他式资源访问权限。- MySQL 中默认使用 SELECT FOR UPDATE 和 SELECT LOCK IN SHARE MODE。- 比较消耗资源但比较简单直接。
假设不会发生冲突所以允许多个线程同时操作相同资源。- 在更新之前检查是否已经有人修改过该记录了。不过,- 比较轻量但如果冲突很多则效率降低。
✍️ 参考资料:
以上内容整理自公开技术资料 最终更新时间: 📅 2月 日

