共计 5942 个字符,预计需要花费 15 分钟才能阅读完成。
这篇“postgresql 和 mysql 有哪些区别”文章的知识点大部分人都不太理解,所以丸趣 TV 小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“postgresql 和 mysql 有哪些区别”文章吧。
区别:1、MySQL 通过执行命令启动实例,而 PG 通过执行进程来启动;2、PG 支持物化视图、而 MySQL 不支持物化视图;3、MySQL 不支持拓展性,而 PG 是高度可扩展的;4、PG 存储过程的功能支持要比 MySQL 好,具备本地缓存执行计划的能力。
本教程操作环境:windows7 系统、mysql8 版本、Dell G3 电脑。
MySQL
MySQL 相对来说比较年轻,首度出现在 1994 年。它声称自己是最流行的开源数据库。MySQL 就是 LAMP(用于 Web 开发的软件包,包括 Linux、Apache 及 Perl/PHP/Python)中的 M。构建在 LAMP 栈之上的大多数应用都会使用 MySQL,包括那些知名的应用,如 WordPress、Drupal、Zend 及 phpBB 等。
一开始,MySQL 的设计目标是成为一个快速的 Web 服务器后端,使用快速的索引序列访问方法(ISAM),不支持 ACID。经过早期快速的发展之 后,MySQL 开始支持更多的存储引擎,并通过 InnoDB 引擎实现了 ACID。MySQL 还支持其他存储引擎,提供了临时表的功能(使用 MEMORY 存 储引擎),通过 MyISAM 引擎实现了高速读的数据库,此外还有其他的核心存储引擎与第三方引擎。
MySQL 的文档非常丰富,有很多质量不错的免费参考手册、图书与在线文档,还有来自于 Oracle 和第三方厂商的培训与支持。
MySQL 近几年经历了所有权的变更和一些颇具戏剧性的事件。它最初是由 MySQL AB 开发的,然后在 2008 年以 10 亿美金的价格卖给了 Sun 公司,Sun 公司又在 2010 年被 Oracle 收购。Oracle 支持 MySQL 的多个版 本:Standard、Enterprise、Classic、Cluster、Embedded 与 Community。其中有一些是免费下载的,另外一 些则是收费的。其核心代码基于 GPL 许可,对于那些不想使用 GPL 许可的开发者与厂商来说还有商业许可可供使用。
现在,基于最初的 MySQL 代码还有更多的数据库可供选择,因为几个核心的 MySQL 开发者已经发布了 MySQL 分支。最初的 MySQL 创建者之一 Michael“Monty”Widenius 貌似后悔将 MySQL 卖给了 Sun 公司,于是又开发了他自己的 MySQL 分支 MariaDB,它是免费的,基于 GPL 许可。知名的 MySQL 开发者 Brian Aker 所创建的分支 Drizzle 对其进行了大量的改写,特别针对多 CPU、云、网络应用与高并发进行了优化。
PostgreSQL
PostgreSQL(简称 PG)标榜自己是世界上最先进的开源数据库。PostgreSQL 的一些粉丝说它能与 Oracle 相媲美,而且没有那么昂贵的价格和傲慢的客服。它拥有很长的历史,最初是 1985 年在加利福尼亚大学伯克利分校开发的,作为 Ingres 数据库的后继。
PostgreSQL 是完全由社区驱动的开源项目,由全世界超过 1000 名贡献者所维护。它提供了单个完整功能的版本,而不像 MySQL 那样提供了 多个不同的社区版、商业版与企业版。PostgreSQL 基于自由的 BSD/MIT 许可,组织可以使用、复制、修改和重新分发代码,只需要提供一个版权声明即可。
可靠性是 PostgreSQL 的最高优先级。它以坚如磐石的品质和良好的工程化而闻名,支持高事务、任务关键型应用。PostgreSQL 的文档非 常精良,提供了大量免费的在线手册,还针对旧版本提供了归档的参考手册。PostgreSQL 的社区支持是非常棒的,还有来自于独立厂商的商业支持。
数据一致性与完整性也是 PostgreSQL 的高优先级特性。PostgreSQL 是完全支持 ACID 特性的,它对于数据库访问提供了强大的安全性 保证,充分利用了企业安全工具,如 Kerberos 与 OpenSSL 等。你可以定义自己的检查,根据自己的业务规则确保数据质量。
在众多的管理特性 中,point-in-time recovery(PITR)是非常棒的特性,这是个灵活的高可用特性,提供了诸如针对失败恢复创建热备份以及快照与恢复的能力。但这并不是 PostgreSQL 的全部,项目还提供了几个方法来管理 PostgreSQL 以实现高可用、负载均衡与复制等,这样你就可以使用适合自己特定需求的功能了。
postgresql 和 mysql 的区别
特性 MySQLPostgreSQL 实例通过执行 MySQL 命令(mysqld)启动实例。一个实例可以管理一个或多个数据库。一台服务器可以运行多个 mysqld 实例。一个实例管理器可以监视 mysqld 的各个实例。
通过执行 Postmaster 进程(pg_ctl)启动实例。一个实例可以管理一个或多个数据库,这些数据库组成一个集群。集群是磁盘上的一个区域,这个区域在安装时初始化并由一个目录组成,所有数据都存储在这个目录中。使用 initdb 创建第一个数据库。一台机器上可以启动多个实例。数据库数据库是命名的对象集合,是与实例中的其他数据库分离的实体。一个 MySQL 实例中的所有数据库共享同一个系统编目。数据库是命名的对象集合,每个数据库是与其他数据库分离的实体。每个数据库有自己的系统编目,但是所有数据库共享 pg_databases。数据缓冲区通过 innodb_buffer_pool_size 配置参数设置数据缓冲区。这个参数是内存缓冲区的字节数,InnoDB 使用这个缓冲区来缓存表的数据和索引。在专用的数据库服务器上,这个参数最高可以设置为机器物理内存量的 80%。Shared_buffers 缓存。在默认情况下分配 64 个缓冲区。默认的块大小是 8K。可以通过设置 postgresql.conf 文件中的 shared_buffers 参数来更新缓冲区缓存。数据库连接客户机使用 CONNECT 或 USE 语句连接数据库,这时要指定数据库名,还可以指定用户 id 和密码。使用角色管理数据库中的用户和用户组。客户机使用 connect 语句连接数据库,这时要指定数据库名,还可以指定用户 id 和密码。使用角色管理数据库中的用户和用户组。身份验证 MySQL 在数据库级管理身份验证。基本只支持密码认证。PostgreSQL 支持丰富的认证方法:信任认证、口令认证、Kerberos 认证、基于 Ident 的认证、LDAP 认证、PAM 认证加密可以在表级指定密码来对数据进行加密。还可以使用 AES_ENCRYPT 和 AES_DECRYPT 函数对列数据进行加密和解密。可以通过 SSL 连接实现网络加密。可以使用 pgcrypto 库中的函数对列进行加密 / 解密。可以通过 SSL 连接实现网络加密。审计可以对 querylog 执行 grep。可以在表上使用 PL/pgSQL 触发器来进行审计。备份、恢复和日志 InnoDB 使用写前(write-ahead)日志记录。支持在线和离线完全备份以及崩溃和事务恢复。需要第三方软件才能支持热备份。在数据目录的一个子目录中维护写前日志。支持在线和离线完全备份以及崩溃、时间点和事务恢复。可以支持热备份。约束支持主键、外键、惟一和非空约束。对检查约束进行解析,但是不强制实施。支持主键、外键、惟一、非空和检查约束。存储过程和用户定义函数支持 CREATE PROCEDURE 和 CREATE FUNCTION 语句。存储过程可以用 SQL 和 C++ 编写。用户定义函数可以用 SQL、C 和 C++ 编写。没有单独的存储过程,都是通过函数实现的。用户定义函数可以用 PL/pgSQL(专用的过程语言)、PL/Tcl、PL/Perl、PL/Python、SQL 和 C 编写。触发器支持行前触发器、行后触发器和语句触发器,触发器语句用过程语言复合语句编写。支持行前触发器、行后触发器和语句触发器,触发器过程用 C 编写。系统配置文件 my.confPostgresql.conf 数据库配置 my.confPostgresql.conf 客户机连接文件 my.confpg_hba.confXML 支持有限的 XML 支持。有限的 XML 支持。数据访问和管理服务器 OPTIMIZE TABLE —— 回收未使用的空间并消除数据文件的碎片
myisamchk -analyze —— 更新查询优化器所使用的统计数据(MyISAM 存储引擎)
mysql —— 命令行工具
MySQL Administrator —— 客户机 GUI 工具 Vacuum —— 回收未使用的空间
Analyze —— 更新查询优化器所使用的统计数据
psql —— 命令行工具
pgAdmin —— 客户机 GUI 工具并发控制支持表级和行级锁。InnoDB 存储引擎支持 READ_COMMITTED、READ_UNCOMMITTED、REPEATABLE_READ 和 SERIALIZABLE。使用 SET TRANSACTION ISOLATION LEVEL 语句在事务级设置隔离级别。支持表级和行级锁。支持的 ANSI 隔离级别是 Read Committed(默认 —— 能看到查询启动时数据库的快照)和 Serialization(与 Repeatable Read 相似 —— 只能看到在事务启动之前提交的结果)。使用 SET TRANSACTION 语句在事务级设置隔离级别。使用 SET SESSION 在会话级进行设置。
VSPostgreSQLMySQL 开源 PostgreSQL 是一个免费的开源系统,它受 PostgreSQL 许可证(自由的开源许可证)的约束。MySQL 属于 Oracle 旗下产品,并提供几种付费版本供用户使用管理 PostgreSQL 是全球用户共同发展的产品 MySQL 是 GNU 通用公共许可以及各种专有协议条款下的产品性能 PostgreSQL 适合对读写速度要求很高的大型系统中使用 MySQL 主要用于 Web 应用程序,该 Web 应用程序仅需要数据库来进行数据交易。遵循 ACIDPostgreSQL 从头到尾都遵循 ACID 原则,并确保满足需求 MySQL 只有在使用 InnoDB 和 NDB 集群存储引擎时才符合 ACID 要求。SQL 兼容性“从文档看,PostgreSQL 是兼容大部分 SQL 的。PostgreSQL 支持 SQL:2011 的大多数功能。在核心一致性所需的 179 个强制性功能中,PostgreSQL 至少兼容 160 个。此外,还有一系列受支持的可选功能。”“从文档看,MySQL 在某些版本是兼容部分 SQL。我们对该产品的主要目标之一是继续努力达到 SQL 标准的要求,但又不牺牲速度或可靠性。我们可以添加 SQL 扩展或对非 SQL 功能的支持,如果这样可以极大地提高 MySQL 服务器在我们大部分用户群中的可用性。”支持平台 PostgreSQL 可以运行在 Linux, Windows (Win2000 SP4 及以上),FreeBSD,OpenBSD,NetBSD , Mac OS X, AIX, IRIX ,Solaris 和 Tu64. 也支持由技术巨头惠普开发的 HP-UX OS,以及开源的 Unix OS。MySQL 可以运行在 Oracle Solaris,Microsoft Windows, Linux Mac OS X。MySQL 扩展了对开源 FreeBSD OS 的支持编程语言支持 PostgreSQL 是用 C 语言编写的,它支持多种编程语言,最突出的 C /C++, Delphi, JavaScript, Java, Python, R , Tcl , Go, Lisp, Erlang 和.Net.PostgreSQL 是用 C 和 C ++ 编写的,它支持 C /C++, Erlang,PHP,Lisp, 和 Go, Perl,Java, Delphi, R , 和 Node.js. 物化视图 PostgreSQL 支持物化视图 MySQL 不支持物化视图数据备份 PostgreSQL 支持主备复制,并且还可以通过实现第三方扩展来处理其他类型的复制 MySQL 支持主备复制,其中每个节点都是主节点,并且有权更新数据可拓展性 PostgreSQL 是高度可扩展的,您可以添加和拥有数据类型,运算符,索引类型和功能语言。MySQL 不支持拓展性。访问方法 PostgreSQL 支持所有标准。MySQL 支持所有标准。社区支持 PostgreSQL 有一个活跃的社区支持,该社区帮助改善现有功能,其富有创造力的提交者竭尽全力确保该数据库保持最新的功能和最大的安全性,成为最先进的数据库。MySQL 也有一个庞大的追随者社区,这些社区贡献者,特别是在被 Oracle 收购之后,主要关注一些偶尔出现的新功能,并维护现有功能。安全性 PostgreSQL 为连接提供本机 SSL 支持,以加密客户端 / 服务器通信。PSQL 还具有行级安全性。MySQL 是高度安全的,并且包含多个安全功能。
PostgreSQL 相对于 MySQL 的优势
在 SQL 的标准实现上要比 MySQL 完善,而且功能实现比较严谨;
存储过程的功能支持要比 MySQL 好,具备本地缓存执行计划的能力;
对表连接支持较完整,优化器的功能较完整,支持的索引类型很多,复杂查询能力较强;
PG 主表采用堆表存放,MySQL 采用索引组织表,能够支持比 MySQL 更大的数据量。
PG 的主备复制属于物理复制,相对于 MySQL 基于 binlog 的逻辑复制,数据的一致性更加可靠,复制性能更高,对主机性能的影响也更小。
MySQL 的存储引擎插件化机制,存在锁机制复杂影响并发的问题,而 PG 不存在。
MySQL 相对于 PG 的优势:
innodb 的基于回滚段实现的 MVCC 机制,相对 PG 新老数据一起存放的基于 XID 的 MVCC 机制,是占优的。新老数据一起存放,需要定时触 发 VACUUM,会带来多余的 IO 和数据库对象加锁开销,引起数据库整体的并发能力下降。而且 VACUUM 清理不及时,还可能会引发数据膨胀;
MySQL 采用索引组织表,这种存储方式非常适合基于主键匹配的查询、删改操作,但是对表结构设计存在约束;
MySQL 的优化器较简单,系统表、运算符、数据类型的实现都很精简,非常适合简单的查询操作;
MySQL 分区表的实现要优于 PG 的基于继承表的分区实现,主要体现在分区个数达到上千上万后的处理性能差异较大。
MySQL 的存储引擎插件化机制,使得它的应用场景更加广泛,比如除了 innodb 适合事务处理场景外,myisam 适合静态数据的查询场景。
以上就是关于“postgresql 和 mysql 有哪些区别”这篇文章的内容,相信大家都有了一定的了解,希望丸趣 TV 小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注丸趣 TV 行业资讯频道。