ITPUB "
作者|冯
转移自|非法添加冯
微信官方账号ID | addvon
PostgreSQL的口号是“世界上最先进的开源关系数据库”,但我觉得这个口号不够明确。什么是“高级”?而且,乍一看,MySQL的口号“世界上最流行的开源关系数据库”,有碰瓷的嫌疑。我想说,PG的特点最生动的描述应该是:一个全栈数据库专门化了多久,全世界吃了多少招。
全栈数据库
成熟的应用可能会用到很多数据组件(功能):缓存、OLTP、OLAP/批处理/数据仓库、流处理/消息队列、搜索索引、NoSQL/文档数据库、地理数据库、空 inter-database、时序数据库、图形数据库。在传统架构选择中,可能会结合多种组件,比如Redis+MySQL+Greenplum/Hadoop+Kafuka/Flink+Elastic Search,一套组合拳基本可以满足大部分需求。但更值得注意的是异构系统的集成:很多代码都是重复的、繁琐的搬砖代码,做着把数据从A组件移到B组件的事情。
在这里,MySQL只能扮演OLTP关系数据库的角色,但是如果是PostgreSQL,它可以有多个角色,一个人处理所有的角色,例如:
OLTP:事务处理是PostgreSQL的本行OLAP:citus分布式插件,ANSI SQL兼容,窗口函数,CTE,CUBE等高级分析功能,任意语言写UDF流处理:PipelineDB扩展,Notify-Listen,物化视图,规则系统,灵活的存储过程与函数编写时序数据:timescaledb时序数据库插件,分区表,BRIN索引空间数据:PostGIS扩展(杀手锏),内建的几何类型支持,GiST索引。搜索索引:全文搜索索引足以应对简单场景;丰富的索引类型,支持函数索引,条件索引NoSQL:JSON,JSONB,XML,HStore原生支持,至NoSQL数据库的外部数据包装器数据仓库:能平滑迁移至同属Pg生态的GreenPlum,DeepGreen,HAWK等,使用FDW进行ETL图数据:递归查询缓存:物化视图以膨胀为六仪,天地无处不在。
用FDW仪式,用青梅仪式,
用西图对待东方,用时标对待南方。
用PostGIS迎接西方,用Pipeline迎接北方。
——《李周笔记》
在探索的旧架构中,整个系统是围绕PostgreSQL设计的。每天有数百万的活动,有数百万的全局DB-TPS,有数百TB的数据,数据组件只用PostgrSQL。独立的数据仓库、消息队列和缓存都是后来才引入的。而且这只是一个验证过的尺度,进一步按PG完全可行。
所以在相当大的规模上,PostgreSQL可以起到全才的作用,一个组件可以作为多组件使用。虽然在某些方面可能不如专用元器件,但一点也不差。单个数据组件的选择可以大大降低项目的额外复杂性,这意味着可以节省大量成本。它把十个人能做的变成一个人能做的。
对于大多数应用来说,在其生命周期中没有超出Pg能力的数据顺序。为不必要的规模进行设计是浪费精力,这实际上是一种过早优化的形式。另外,只有当没有一款软件能够满足你所有的需求时,才会有拆分和整合的利弊取舍。集成多种异构技术是一项艰巨的工作。如果有一种技术可以满足您的所有需求,那么使用这种技术是最好的选择,而不是试图用多个组件来重新实现它。
当业务规模增长到一定程度时,可能需要使用基于微服务/总线的体系结构,将数据库的功能分成多个组件。但是PostgreSQL的存在,大大的把这种取舍的门槛往后推了推,拆分后依然可以发挥重要作用。
易于操作和维护
当然,除了功能强大,Pg的另一个重要优势就是友好的操作和维护。有许多非常实用的功能:
DDL能放入事务中,删表,TRUNCATE,创建函数,索引,都可以放在事务里原子生效,或者回滚。这就能进行很多骚操作,比如在一个事务里通过RENAME,完成两张表的王車易位。能够并发地创建、删除索引,添加非空字段,重整索引与表(不锁表)。这意味着可以随时在线上不停机进行重大的模式变更,按需对索引进行优化。复制方式多样:段复制,流复制,触发器复制,逻辑复制,插件复制等等。这使得不停服务迁移数据变得相当容易:复制,改读,改写三步走,线上迁移稳如狗。提交方式多样:异步提交,同步提交,法定人数同步提交。这意味着Pg允许在C和A之间做出权衡与选择,例如交易库使用同步提交,普通库使用异步提交。系统视图非常完备,做监控系统相当简单。FDW的存在让ETL变得无比简单,一行SQL就能解决。FDW可以方便地让一个实例访问其他实例的数据或元数据。在跨分区操作,数据库监控指标收集,数据迁移等场景中妙用无穷。同时还可以对接很多异构数据系统。功能很多,就不一一列举了。
生态健康
PostgreSQL拥有健康的生态和非常活跃的社区。
与MySQL相比,PostgreSQL的一大优势是协议友好。Pg采用类似BSD/MIT的PostgreSQL协议,几乎就是说只要你不打着PG的旗号进行诈骗和欺骗,你就可以为所欲为,换个皮卖了。你不会看到很多国内的数据库,或者很多“自主开发的数据库”其实是Pg的换肤或者二次开发产品。
当然也有很多衍生产品会回馈到主干上,比如timescaledb、pipelinedb、citus,这些都是基于PG的,最终成为原生PG的插件。很多时候,如果想实现一个功能,可以通过搜索找到对应的插件或者实现。开源,还是想谈点感受。
Pg的代码质量挺高的,评论很明确。c的代码读起来有一种Go的感觉,代码可以当做文档来读。你可以从中学到很多。相比之下,其他数据库,比如MongoDB,一目了然就放弃了阅读。
至于MySQL,社区版用的是GPL协议,其实很伤人。要不是GPL感染,怎么会有这么多基于MySQL的开源数据库?而且MySQL还在龟壳手里,把球托在别人手里不是明智的选择,更不是行业内的毒瘤。Facebook修改反应协议的混乱是过去的一个教训。
问题
当然,如果有什么缺点或遗憾,还是有几个:
因为使用了MVCC,数据库需要定期VACUUM,需要定期维护表和索引避免膨胀导致性能下降。没有很好的开源集群监控方案(或者太丑!),需要自己做。慢查询日志和普通日志是混在一起的,需要自己解析处理。官方Pg没有很好用的列存储,对数据分析而言算一个小遗憾。当然都是小病小病,但真正的问题可能与技术无关…
归根结底,MySQL确实是最受欢迎的开源关系数据库。没有办法。很多写Java和PHP的人一开始都用MySQL,所以Pg招人比较难是事实,很多情况下只能自己培养。不过看DB Engines上的流行趋势,未来还是很光明的。
1.《postgresql 问题来了,PostgreSQL 的好处都有啥?》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《postgresql 问题来了,PostgreSQL 的好处都有啥?》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/yule/1176470.html