Code前端首页关于Code前端联系我们

PostgreSQL 相对于 MySQL 有哪些优势?

terry 2年前 (2023-09-26) 阅读数 311 #数据库

PostgreSQL 与 MySQL 相比,优势何在?PostgreSQL 与 MySQL 相比,优势何在?PostgreSQL 与 MySQL 相比,优势何在?

MySQL 相对于 PostgreSQL 的缺点: PostgreSQL 与 MySQL 相比,优势何在?PostgreSQL 与 MySQL 相比,优势何在?

PostgreSQL 的主要优点:

1. PostgreSQL 完全免费,并在 BSD 协议下运行。如果你改变 PostgreSQL,然后把它卖掉换钱,没有人会在意。对您来说重要的是 PostgreSQL 数据库不受其他公司控制。不用说,Oracle数据库是一个商业数据库,不向公众开放。 MySQL数据库虽然是开源的,但是自从Oracle收购了SUN之后,现在基本上已经被Oracle控制了。事实上,在收购SUN之前,MySQL中最重要的InnoDB引擎也被Oracle控制着,而在MySQL中,很多重要的数据都存储在InnoDB引擎中,我们公司也是如此。所以如果MySQL的市场体量与Oracle的数据库市场体量发生冲突,毫无疑问Oracle会牺牲MySQL。

2。有很多开源软件可以与 PostgreSQl 配合使用。有很多分布式集群软件如pgpool、pgcluster、slony、plploxy等可以轻松实现读/写隔离、负载均衡、水平数据共享等解决方案,但在MySQL下比较困难。

3。 PostgreSQL 源代码写得非常清楚,比 MySQL 更容易阅读。我怀疑MySQL源代码已被混淆。这就是为什么很多公司基于PostgreSQL做二次开发。

4。 PostgreSQL在复杂SQL实现、存储过程、触发器、索引等很多方面都优于MySQL。同时,PostgreSQL是多线程的,MySQL是线程的。虽然MySQL在并发不高的时候处理速度很高,但是当并发高的时候,在单台多核机器上MySQL的整体处理性能不如PostgreSQL。原因是即使是MySQL也无法充分利用处理器的性能。

我现在只能想到这些。如果以后想起来的话我会补充的。欢迎大家做出贡献。

PostgreSQL与Oracle或InnoDB多版本实现的区别

PostgreSQL与Oracle或InnoDB多版本实现最大的区别在于最新版本和历史版本是否分开存储。 PostgreSQL 没有区别,而 Oracle 和 InnoDB 则有区别。 Innodb 只对数据进行分区,而不对索引本身进行分区。
PostgreSQL 的主要优点有:
1. PostgreSQL 没有回滚段,而 Oracle 和 Innodb 有回滚段,Oracle 和 Innodb 有回滚段。对于Oracle和Innodb来说,回滚段非常重要。恢复段的损坏会导致数据丢失甚至无法启动数据库等严重问题。另外,由于PostgreSQL没有回滚段,旧的数据被记录在原始文件中。因此,当数据库异常崩溃时,恢复不会像Oracle和Innodb数据库那么复杂,因为Oracle和Innodb在恢复时是同步的。它需要重做和撤消。因此,PostgreSQL数据库发生异常崩溃后数据库无法恢复的概率小于Oracle和MySQL。
2、由于旧数据是直接写入数据文件而不是回滚段,所以不会像Oracle那样经常报ora-01555错误。
3.回滚不会删除数据,可以很快完成回滚。然而在Oracle和Innodb中,回滚是非常复杂的。当事务回滚时,事务所做的更改必须被清除,并且插入的记录必须被删除。 ,更新的记录必须更新回来(参见row_undo函数),并且undo过程也会重新创建大量的重做日志。
4. WAL日志比Oracle和Innodb简单。 Oracle 不仅必须记录对数据文件的更改,还必须记录对回滚段的更改。
PostgreSQL 多版本的主要缺点是:
1. 最新版本和历史版本没有分开存储,需要多次扫描来清理旧版本,成本相对较高,但一般数据库有尖峰。如果我们合理管理VACUUM,这并不是什么大问题,而且VACUUM在PostgreSQL9.0中得到了进一步的改进。
2、由于索引中没有版本信息,所以无法进行覆盖索引扫描,也就是说查询只扫描索引并直接从索引返回需要的属性,还需要访问表。 Oracle 和 Innodb 可以;

进程模式与线程模式对比
PostgreSQL和oracle是进程模式,MySQL是线程模式。
进程模式具有更高的多处理器利用率。
进程模式下的共享数据需要使用共享内存,而线程模式下的数据本身是在进程空间内共享的。跨线程访问只需要跨线程同步控制。
线程模式消耗资源更少。
因此,MySQL 可以支持比 Oracle 更多的连接。
对于PostgreSQL来说,即使不使用连接池软件也存在这个问题,但是PostgreSQL有pgbouncer、pgpool等优秀的连接池软件,所以通过连接池可以支持很多连接。

堆表和索引组织表的比较

Oracle支持堆表和索引组织表
PostgreSQL仅支持堆表,不支持索引组织表
Innodb仅支持索引组织表
索引组织表表的优点:
表中的数据是按索引组织的,数据是有序的。如果使用主键访问数据,则数据访问速度更快。在堆表中,通过主键访问数据时,首先要通过主键的索引找到数据的物理位置。
索引组织表的缺点:
当索引组织表中添加其他索引时,其他索引记录的数据位置不再是物理位置,而是主键值,因此对于索引组织表来说,主键值不能太大,否则会占用大量空间。
对于索引排序表,如果每次都在中间插入数据,会导致索引分裂,从而大大降低插入的效率。所以对于使用innodb一般最好把主键做成无意义的序列,这样每次插入都在最后完成,以避免这个问题。
由于索引组织表是基于索引树的,一般需要根据数据块之间的关系来访问数据块,而不是根据物理块来访问数据,所以在执行时比堆表慢全表扫描。许多问题在 OLTP 中可能并不明显,但在数据仓库应用程序中可能会成为问题。

PostgreSQL 9.0 中的特性:
PostgreSQL 中的热备特性
这意味着在使用日志同步时,standby 也可以提供只读服务,这对于分离读写非常有用。该功能仅在oracle11g中可用。

PostgreSQL 异步提交功能:
此功能仅在 Oracle 至 oracle11g R2 中可用。由于在很多应用场景中,发生断电时允许少量数据丢失,因此该特性特别适合此类场景。在 PostgreSQL9.0 中将 synchronous_commit 设置为 false 可打开此功能。需要注意的是,即使 PostgreSQL 设置为异步发送,当主机宕机时也只会丢失少量数据。异步提交不会造成数据损坏、数据库无法启动。我从来没有听说过 MySQL 中的这个功能。

PostgreSQL中索引的特殊性:

PostgreSQL可以有部分索引,这意味着只能对表中的部分数据建立索引,并且索引创建可以有where条件。同时PostgreSQL中的索引是可以反向查找的,所以不需要在PostgreSQL中建立专门的降序索引。

来源:博客

作者:osdba

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门