- 1 数据库概述
- 1.1 DBMS 简史
- 1.2 数据库理论
- 1.3 事务 Transaction
- 1.4 SQL
- 1.5 数据库接口
- 本章参考
- 2 Relational 关系数据库
- 2.1 关系理论
- 2.2 Oracle
- 2.5 Microsoft SQL Server
- 2.6 DB2
- RDBS 比较
- 本章参考
- 3 NoSQL 非关系数据库
- 3.1 NoSQL 分类
- 3.2 键值 key-value 数据库
- 3.3 列存储数据库
- 3.4 图形数据库
- 本章参考
- 4 NewSQL
- 4.1 NewSQL 分类
- 4.2 分布式数据库 Distributed
- 本章参考
- 5 时序数据库 TSDB
- 5.1 简介
- 5.2 时序数据库比较
- 本章参考
- 6 SQL 引擎
- 6.1 SQL 引擎分类
- 6.2 SQL On Hadoop
- 本章参考
- 7 其它数据库
- 7.1 内存数据库 In-memory
- 7.2 嵌入式数据库 Embed
- 7.3 搜索引擎
- 本章参考
- 8 各种数据库分析比较
- 8.1 数据库排行 db-engines
- 8.2 数据库技术选型
- 8.3 DB 性能比较
- 8.4 国产数据库产品列表
- 8.5 DB 常用 SQL 比较
- 本章参考
- 9 SQL 调优
- 9.1 SQL JOIN
- 9.2 SQL 执行流程
- 10 数据库大型应用实例
- 10.1 负载均衡技术
- 10.2 数据库的高可用 HA
- 10.3 数据库的读写分离
- 10.4 数据库拆分(分布式)
- 10.5 跨库查询
- 本章参考
- 参考资料
- 附录
RDBS 比较
模式 Schema
模式(Schema): 是数据库的组织和结构,schemas and schemata 都可以作为复数形式。模式中包含了 schema 对象,可以是表(table)、列(column)、数据类型(data type)、视图(view)、存储过程(stored procedures)、关系(relationships)、主键(primary key)、外键(foreign key) 等。数据库模式可以用一个可视化的图来表示,它显示了数据库对象及其相互之间的关系。为了区分不同的集合(数据库/Schema 对象),就需要给 不同的集合起不同的名字,默认情况下一个用户对应一个集合,用户的 schema 名等于用户名,并作为该用户缺省 schema。
ISO/IEC 9075-1 SQL 标准中将 schema 定义为描述符的持久命名集合(a persistent, named collection of descriptors)。不同 RDBS 对 Schema 的定义不同。
表格 14 Schema 在 RDBS 里的区别
DB | 含义 |
---|---|
MySQL | 概念上,模式是一组相互关联的数据库对象,如表,表列,列的数据类型,索引,外键等等。物理上, 模式与数据库是同义的。 |
Oralce | Oracle 的 schema 与数据库用户密切相关。schema 是数据或模式对象的逻辑结构的集合,由数据库用户拥有,并且与该用户具有相同的名称,也就是说每个用户拥有一个独立的 schema。某些对象可以存储在数据库中,但不能存储在 schema 中。 |
PostgreSQL | 一个数据库可以包含多个 Schema,不同 schema 下可以有相同名称的表、函数等对象且互相不冲突。Schema 用来管理一组对象,相当于 MySQL 里的数据库概念。PG 里的 Schema 是指定的表集合,可以包含视图,索引,序列,数据类型,运算符和函数。 |
SQL Server | schema 中包含了数据库的表,字段,数据类型以及主键和外键的名称。 |
备注:都支持 CREATE SCHEMA
语句。
多版本并发控制 MVCC
MVCC (Mutil-Version Concurrency Control),就是多版本并发控制。 MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问。
MVCC 实现主要有两种方法:回滚法和插入法。
表格 15 MVCC 实现的两种方法比较
方法一 | 方法二 | |
---|---|---|
简述 | 写数据时,把旧数据移到一个单独的地方如回滚段,读时从回滚段取旧数据。 | 写数据时,旧数据不删除,把新数据插入。 |
实现例子 | MySQL INNODB、Oracle | PostgreSQL |
优点 | 查询快,不影响插入。 | |
缺点 | 节约存储空间。 | 旧数据占用空间。 |
MySQL 和 PostgreSQL
表格 MySQL 和 PostgreSQL 比较
MySQL | PostgreSQL | |
---|---|---|
简介 | ||
比较版本 | 5.7.6 | 9.4.1 |
ANSI 标准兼容性 | 如果客户喜欢,他们就会支持非标准扩展 | 一开始就将标准构建到平台 |
ACID 遵从性 | 9 个存储引擎,但只有 MyIsam 和 InnoDB 与大部分用户有关。其中 InnoDB 为默认存储引擎 。 | 一个存储引擎 |
无锁表修改 | 表级锁 | 行级锁 |
子查询 | 较弱,不支持全外连接 | 优秀 |
JSON 支持和 NoSQL | 无 | 增加了 JSON 支持 |
许可 | GPL | 类似 MIT |
数据一致性 | 开发人员需要将服务器设定为严格 SQL 模式才能数据验证 | 数据插入和更新之前进行严格的验证 |
服务器扩展 | 提供了插件程序 API, 支持 C/C++或任何兼容 C 的语言,从 5.7.3 版本开始支持全文搜索。 | 支持的语言更多。 |
备注:MySQL 和 PostgreSQL 是最有名的两个开源关系数据库。MariaDB 为 MySQL 创建者 Monty Widenius 创建的一个 MySQL 分支。
表格 MySQL VS PostgreSQL
MySQL | PostgreSQL | |
---|---|---|
SQL 标准实现 | 较简单 | √ 功能更完善、更严谨 |
查询场景 | 优化器较简单,系统表、运算符、数据类型的实现都很精简,非常适合简单的查询操作 | √ 对表连接支持较完整,优化器的功能较完整,支持的索引类型很多,复杂查询能力较强; |
表组织形式 | 采用索引组织表,适合基于主键匹配的查询、删改操作,但是对表结构设计存在约束; | √ 主表采用堆表存放,数据量更大 |
复制 | 基于 binlog 的逻辑复制 | √ 物理复制,数据的一致性更加可靠,复制性能更高,对主机性能的影响也更小。 |
存储过程 | 较弱。 | √ 功能更强,具备本地缓存执行计划的能力 |
MVCC | √ 基于回滚段实现。更优。 | 新老数据一起存放的基于 XID 实现。 |
并发 | MySQL 的存储引擎插件化机制,存在锁机制复杂影响并发的问题 | MVCC 的实现机制定时触发 VACUUM,导致并发能力下降;若清理不及时,还可能引发数据膨胀。 |
存储插件化机制 | √ 应用场景更加广泛,如 innodb 适合事务处理场景外,myisam 适合静态数据的查询场景。 | 不支持 |
分区 | √ 主要体现在分区个数达到上千上万后的处理性能差异较大,性能更好。 | 基于继承表的分区实现 |
备注:postgresql 和 mysql 相比,postgresql 更加适合严格的企业应用场景(比如金融、电信、ERP、CRM),而 MySQL 则是更加适合业务逻辑相对简单、对数据可靠性要求比较低的互联网场景(比如 google、facebook、alibaba)。
Oracle 和 PostgreSQL
Oracle 和 PostgreSQL 是两种流行的关系数据库管理系统,各自有独特的特点和适用场景。以下是它们的详细比较:
1. 许可与成本
- Oracle : 商业数据库,通常需要购买许可证,成本较高,适合大型企业。
- PostgreSQL : 开源数据库,使用 GPL 或类似许可证,免费使用和分发,适合中小型企业和个人项目。
2. 功能与特性
- Oracle :
- 高级功能如分区、数据加密、闪回技术、数据压缩等。
- 支持 PL/SQL 编程语言。
- 优秀的支持与文档,适合复杂的企业级应用。
- PostgreSQL :
- 支持丰富的扩展,用户可以自定义数据类型、函数和操作符。
- 强大的事务处理和并发控制(MVCC)。
- 支持 JSONB,适合处理非结构化数据。
3. 性能
- Oracle : 通常在处理大规模数据和复杂查询时表现优秀,优化器功能强大。
- PostgreSQL : 在许多情况下也表现出色,特别是对读操作优化良好,但在高并发写操作时可能稍逊色。
4. 可扩展性
- Oracle : 提供高可用性和集群解决方案(如 Oracle RAC),适合大规模应用。
- PostgreSQL : 通过分区、复制和负载均衡等方式可扩展,但传统的高可用性方案相比于 Oracle 可能不够成熟。
5. 社区与支持
- Oracle : 官方支持强大,适合需要商业级支持的企业。
- PostgreSQL : 拥有活跃的开源社区,用户可以通过社区获得支持和更新。
6. 兼容性与迁移
- Oracle : 兼容性较好,但迁移到其他数据库时可能面临挑战。
- PostgreSQL : 提供多种工具和方法帮助数据迁移,并与多种开发环境兼容。
7. 学习曲线
- Oracle : 学习曲线较陡,特别是对于复杂的功能和配置。
- PostgreSQL : 相对易于上手,文档丰富,社区资源多。
结论
选择 Oracle 还是 PostgreSQL 主要取决于项目需求、预算和团队的技术背景。Oracle 更适合需要高性能和高级特性的企业应用,而 PostgreSQL 则是灵活、开源的选择,适合多种规模的应用。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论