PostgreSQL介绍
PostgreSQL 是一个功能强大的开源关系型数据库系统,它使用并扩展了 SQL 语言,并结合了许多功能,可以安全地存储和扩展复杂的数据工作
PostgreSQL 因其经过验证的架构、可靠性、数据完整性、强大的功能集、可扩展性以及软件背后的开源社区始终如一地提供高性能和创新解决方案的奉献精神而赢得了良好的声誉。PostgreSQL 可在所有主要操作系统上运行,自 2001 年以来一直符合ACID,并且具有强大的附加组件,例如流行的PostGIS地理空间数据库扩展器。
为什么使用 PostgreSQL?
PostgreSQL 附带了许多功能,旨在帮助开发人员构建应用程序、管理员保护数据完整性和构建容错环境,并帮助您管理数据,无论数据集有多大或多小。除了免费和开源之外,PostgreSQL 还具有高度可扩展性。例如,可以定义自己的数据类型、构建自定义函数,甚至可以用不同的编程语言编写代码,而无需重新编译数据库!
PostgreSQL社区是纯社区,没有被商业公司控制,让很多用户云厂商愿意贡献核心代码,让PostgreSQL得到了快速的版本迭代,丰富的应用插件。
为什么要学习PostgreSQL?
中国目前在全面实行国产化替代项目,从军工、政府、金融、医疗、教育到企业逐步替换掉非国产化的东西,比如说计算机服务器,军工,软件等,软件中数据库是重要的一环。国内很多数据软件,以下列举几个常用的国产重构的关系型集中式架构数据库。
国外数据库使用情况 来源:DB-Engines Ranking - popularity ranking of relational DBMS
国内数据库使用情况 来源:中国数据库排行 - 墨天轮
可以看到排行前几的底层技术基本使用PostgreSQL
为什么要国产数据库大多数底层都基于PostgreSQL而非MYSQL?
主要是PostgreSQL与MySQL的版权区别
PostgreSQL许可
PostgreSQL许可是一种自由的开源许可,BSD开源协议是一个给于使用者很大自由的协议。可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布,被誉为开源许可的“活雷锋”。
BSD 代码鼓励代码共享,但需要尊重代码作者的著作权。BSD由于允许使用者修改和重新发布代码,也允许使用或在BSD代码上开发商业软件发布和销售,因此是对商业集成很友好的协议。所以很多公司企业在选开源产品的时都首选BSD协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者二次开发。
PostgreSQL许可描述:PostgreSQL: License
MySQL许可
众所周知,MySQL被Oracle所控制,MySQL同时使用了GPL和一种双重许可
GPL(General Public license)是公共许可,遵循了GPL的软件是公共的。如果某软件使用了GPL软件,那么该软件也需要开源,如果不开源,就不能使用GPL软件,这和是否把该软件商用与否是没关系的。具体约束:
-
不允许对在MySQL上作出的修改申请专利;
-
MySQL上的修改需要公开,且所有权归Oracle所有;
-
出于纯学术目的、练习目的源码修改也是符合GPL的;
-
Oracle的MySQL企业版或高级功能会涉及费用,并且Oracle公司不允许其它基于MySQL的闭源产品。
可以理解为:商业许可是控制MySQL的公司留给自己的特权。
优势
PostgreSQL的优势
-
在SQL的标准实现上要比MySQL完善,而且功能实现比较严谨。
-
对表连接支持较完整,优化器的功能较完整,支持的索引类型很多,复杂查询能力较强。
-
PostgreSQL主表采用堆表存放,MySQL采用索引组织表,能够支持比MySQL更大的数据量。
-
PostgreSQL的主从复制属于物理复制,相对于MySQL基于binlog的逻辑复制,数据的一致性更加可靠,复制性能更高,对主机性能影响更小
-
PostgreSQL支持JSON和其他NoSQL功能,还支持索引JSON数据以加快访问速度
-
PostgreSQL完全免费,而且是BSD协议,如果你把PostgreSQL改一改,然后再拿去卖钱,也没有人管你,相反MySQL现在是被Oracle公司控制
MySQL的优势
-
innodb
的基于回滚段实现的MVCC
机制,相对PG新老数据一起存放的基于XID的MVCC
机制,是占优的。新老数据一起存放,需要定时触发VACUUM,会带来多余的IO和数据库对象加锁开销,引起数据库整体的并发能力下降。而且VACUUM清理不及时,还可能会引发数据膨胀。 -
MySQL采用索引组织表,这种存储方式非常适合基于主键匹配的查询、删改操作,但是对表结构设计存在约束。
-
MySQL的优化器较简单,系统表、运算符、数据类型的实现都很精简,非常适合简单的查询操作。
-
MySQL相对于PostgreSQL在国内的流行度更高,PostgreSQL在国内显得就有些落寞了。
-
MySQL的存储引擎插件化机制,使得它的应用场景更加广泛,比如除了innodb适合事务处理场景外,myisam适合静态数据的查询场景。
从应用场景来说,PG更加适合严格的企业应用场景( 比如金融、电信、ERP、CRM ),但不仅仅限制于此,PostgreSQL的json,jsonb,hstore等数据格式,特别适用于一些大数据格式的分析;
而MySQL更加适合业务逻辑相对简单、数据可靠性要求较低的互联网场景(比如google、facebook、alibaba),当然现在MySQL的在innodb引擎的大力发展,功能表现良好。