| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> PostgreSQL和MySQL应该如何选择 -> 正文阅读 |
|
[大数据]PostgreSQL和MySQL应该如何选择 |
前话 最近看了一篇文章,说炙手可热的 PostgreSQL 已成大厂首选。 大意如下: 随着企业在云上对其数据库资产进行现代化改造,许多企业都在积极消除对传统数据库引擎的依赖。企业客户都在寻找标准化的开放系统如 PostgreSQL,以消除昂贵的、不友好的许可以及与传统数据库产品的供应商锁定。 根据 DB-Engines 的数据,PostgreSQL 的受欢迎程度一直在稳步提升,目前在所有数据库中排名第四。随着 PostgreSQL 在数据库中越来越受欢迎,谷歌云、AWS、微软云也都开始将重点慢慢转向 PostgreSQL。 对此,笔者查阅了一些资料,做了一些参考和整理后,从如下一些点进行了对比:
各个特性详细介绍如下: 一、开源 开源协议:PostgreSQL 基于自由的 BSD/MIT 许可,组织可以使用、复制、修改和重新分发代码,只需要提供一个版权声明即可。 PG 的开源协议特别灵活,任何公司的和个人都可以把PG作为一个产品销售,而不需要像 MySQL那样必须修改大部分代码才可以作为公司的产品。 MySQL 的开源协议是基于 GPL 协议,任何公司都可以免费使用,不允许修改后和衍生的代码做为闭源的商业软件发布和销售,MySQL 的版权在甲骨文手中,甲骨文可以推了其商业闭源版本。 二、ACID支持方面 PostgreSQL 支持事务的强一致性,事务保证性好,完全支持 ACID 特性。 MySQL 只有 InnoDB 引擎支持事务,事务一致性保证上可根据实际需求调整,为了最大限度的保护数据,MySQL 可配置双一模式,对 ACID 的支持上比 PG 稍弱。 三、SQL标准的支持方面 PostgreSQL 几乎支持所有的 SQL 标准,支持类型相当丰富。 MySQL 只支持部分 SQL 标准,相比于 PG 支持类型稍弱。 四、复制 PostgreSQL 可以做到同步,异步,半同步复制,以及基于日志逻辑复制,可以实现表级别的订阅和发布。 MySQL 的复制是基于 binlog 的逻辑异步复制,无法实现同步复制。 MySQL 所有的高可用方案都是基于 binlog 做的同步,以及基于 MySQL 的分布式数据也是基于MySQL 的 binlog 实现,binlog 是 MySQL 生态圈最基本技术实现。 五、并发控制 PostgreSQL 通过其 MVCC 实现有效地解决了并发问题,从而实现了非常高的并发性。 PG新老数据一起存放的基于 XID 的 MVCC 机制,新老数据一起存放,需要定时触发 VACUUM,会带来多余的 IO 和数据库对象加锁开销,引起数据库整体的并发能力下降。而且 VACUUM 清理不及时,还可能会引发数据膨胀。 MySQL仅在 InnoDB 中支持 MVCC。 InnoDB 的基于回滚段实现的 MVCC 机制,但是 MySQL 的间隙锁影响较大,锁定数据较多。 六、性能 PostgreSQL 广泛用于读写速度高和数据一致性高的大型系统。此外,它还支持各种性能优化,没有读锁定的并发性。 PostgreSQL 性能最适用于需要执行复杂查询的系统。 PostgreSQL 在 OLTP/OLAP 系统中表现良好,读写速度以及大数据分析方面表现良好,基于 PG 的 GP 数据库,在数据仓库领域表现良好。 PostgreSQL 也适用于商业智能应用程序,但更适合需要快速读/写速度的数据仓库和数据分析应用程序。 MySQL 是广泛选择的基于 Web 的项目,需要数据库只是为了简单的数据事务。但是,当遇到重负载或尝试完成复杂查询时,MySQL 通常会表现不佳。 MySQL 的读取速度,在 OLTP 系统中表现良好。 MySQL + InnoDB 为 OLTP 场景提供了非常好的读/写速度。总体而言,MySQL 在高并发场景下表现良好。 MySQL 是可靠的,并且与商业智能应用程序配合良好,因为商业智能应用程序通常读取很多。 七、高可用技术的实现 PostgreSQL: 1)基于流复制的异步、同步主从。 2)基于流复制的–keepalive。 3)基于流复制的 –repmgr。 4)基于流复制的 –patroni+etcd。 5)共享存储HA(corosync+pacemaker)。 6)Postgres-XC。 7)Postgres-XL。 8)中间件实现:pgpool、pgcluster、slony、plploxy。 MySQL: 1)主从复制。 2)主主复。 3)MHA。 4)LVS+KEEPALIVE。 5)MGR分布式数据库,多点写入[不建议],基于paxos协议。 6)PXC分布式数据库,多点写入[不建议],基于令牌环协议。 7)INNODB CLUSTER[8.0新技术,基于MGR实现,上层封装命令],基于paxos协议。 8)中间件实现:mycat。 八、外部数据源 PostgreSQL 不支持多数据引擎。但支持 Extension 组件扩充,以及通过名为 FDW 的技术将Oracle、Hadoop、MongoDB、SQLServer、Excel、CSV 文件等作为外部表进行读写操作,因此,可以为大数据与关系型数据库提供良好对接。 MySQL:无。 九、数据存储和数据类型 PG 主表采用堆表存放,存放的数据量较大,数据访问方式类似于 Oracle 的堆表。 MySQL 采用索引组织表,MySQL 必须有主键索引,所有的数据访问都是通过主键实现,二级索引访问时,需要扫描两遍索引(主键和二级索引)。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 19:35:03- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |