网友回复
PostgreSQL和MySQL都是最流行的开源数据库。MySQL被认为是世界上最流行的数据库,而PostgreSQL被认为是世界上最先进的数据库。MySQL并不完全符合SQL标准,并且很多PG上的特性并不支持。这就是为什么PG受到大量开发者喜欢的原因,并且现在PG越来越流行。
前几年,Oracle收购了MySQL,导致MySQL的出现两个版本:商业版和社区版。对于后者,由于Oracle控制了MySQL的开发,受到了广大使用者的批评。 PostgreSQL是世界上最受欢迎的数据库:他支持大量企业级特性和功能。PG由postgresql全球社区开发,该社区由一批优秀的开发人员组成,几十年来一直努力确保PG具有丰富的功能,并与其他开源、商业数据库竞争。社区也从世界各地的公司得到巨大贡献。1、为什么使用PG
PG作为开源、功能丰富的数据库,可与Oracle展开竞争。开发者也会将PG当做NoSQL数据库来使用。在云中和本地部署使用PG非常简单,也可以在docker容器等各个平台使用。 PG完全支持ACID,对开发人员和DBA非常友好,是跨任何域的高并发事务、复杂应用程序最佳选择,可以满足基于WEB和移动的各种应用程序服务。PG也是一个非常好的数据仓库,用于大数据上运行复杂的报告查询。2、为什么使用MySQL
MySQL具有社区版和商业版。商业版由Oracle管理。作为关系型数据库,部署和使用非常简单。但是对于SQL标准要求很高的应用不太合适。MySQL的集成能力也有限,很难成为异构数据库环境的一部分。 MySQL适用于简单web应用程序或者需要简单schema、SQL执行数据库操作的应用。对于处理大量数据的复杂应用来说,MySQL并不是一个很好的选择。3、易用性
PG能够处理结构化和非结构化的数据、具备关系型数据库所有的特性。MySQL在SQL和特性方面的局限性可能会为其构建高效的RDBMS应用程序带来挑战。4、语法
大部分数据库的SQL语法都比较相似。然而,MySQL并不支持所有的SQL。对于支持的SQL和其他数据库都比较相似。例如查询,PG和MySQL都是: SELECT * FROM employees;5、数据类型
MySQL和PG都支持许多数据类型,从传统的数据类型(integer、date、timestamp)到复杂类型(json、xml、text)。然而,在复杂实时数据查询下又有所不同。 PG不止支持传统数据类型:numeric、strings、date、decimal等,还支持非结构的数据类型:json、xml、hstore等以及网络数据类型、bit字符串,还有ARRAYS,地理数据类型。 MySQL不支持地理数据类型。 从9.2开始,PG支持json数据类型。相对于MySQL来说,PG对json的支持比较先进。他有一些json指定的操作符和函数,是的搜索json文本非常高效。9.4开始,可以以二进制的格式存储json数据,支持在该列上进行全文索引(GIN索引),从而在json文档中进行快速搜索。 从5.7开始,MySQL支持json数据类型,比PG晚。也可以在json列上建立索引。然而对json相关的函数的支持比较有限。不支持在json列上全文索引。由于MySQL对SQL支持的限制,在存储和处理json数据方面,MySQL不是一个很好的选择。6、复制和集群
MySQL和PG都具有复制和集群的能力,能够确保数据操作水平分布。 MySQL支持主-备、一主多备的复制机制,通过SQLs即binlog保证将所有的数据传输到备机上。这也是复制只能是异步、半同步的原因。 优点:备机可以写。这就意味着一旦master崩溃了,slave可以马上接管,确保应用正常工作。DBAs需要确保slave变成主了,并且新的binlog复制到原主。当有很多长SQL时,复制会变得慢。 MySQL也支持NDB集群,即多主的复制机制。这种类型的复制对要求水平扩展的事务有利。 PG的复制和MySQL不同,他是基于WAL文件,使复制更加可靠、更快、更有利于管理。他也支持主备和一主多从的模式,包括级联复制形式。PG的复制成为流复制或物理复制,可以异步也可以同步。 默认情况下,复制时异步,Slave能够满足读请求。如果要求在备机上读到的数据和主机上一样,就需要设置同步复制。但是缺点是一旦备机上事务没有提交,主机就会hang住。 可以使用第三方工具Slony、Bucardo、Londiste、RubyRep等对表级别的复制进行归档。这些工具都是基于触发器的复制。PG也支持逻辑复制。最初通过pglogical扩展支持逻辑复制,从10开始内核支持逻辑复制。7、视图
MySQL支持视图,视图下面通过SQL使用的表的个数限制为61。视图不存储物理数据,也不支持物化视图。简单SQL语句创建的视图可以更新,复杂SQL创建的视图不可以更新。 PG和MySQL类似。简单SQL创建的视图可更新,复杂的不行。但是可以通过RULES更新复杂的视图。PG支持物化视图和REFRESHED。8、触发器
MySQL支持INSERT、UPDATE、DELETE上AFTER和BEFORE事件的触发器。触发器不同执行动态SQL语句和存储过程。 PG的触发器比较先进。支持AFTER、BEF...点击查看剩余70%