PostgreSQL是什么?StackOverflow上开发者最爱和最想要的关系型数据库

PostgreSQL是什么?StackOverflow上开发者最爱和最想要的关系型数据库

大家好,又见面了,我是全栈君。

经常会有人问我PostgreSQL是什么?

这个问题不太好回答,因为PostgreSQL除了可以让你做到几乎所有其他主流关系型数据库能做的事情外,还可以做到很多别的数据库做不到的事情。

如果非要一个简单直接、便于理解的定义,那么你可以理解为一个开源可自由扩充的Oracle

尽管这并不是非常准确。因为PostgreSQL对程序员要更友好一些,下图是来自StackOverflow 2017年的一些统计,参考Developer Survey Results 2017

  • 最想要的数据库

最想要的数据库.png

  • 最爱的数据库

最爱的数据库.png

如果只是说关系型数据库,那么“StackOverflow年度统计中开发者最爱和最想要的关系型数据库”这个结论不难得出。

而对比其中的最热门:

流行度.png

你会发现一个有意思的现象:对你最好的未必是那个大家都知道的

PostgreSQL好在哪里?

在回答了前面的回答之后,这是更多的人会想问的第二个问题。

而对于这颗沧海遗珠,用一句话其实难以尽述。如果非要总结,可以认为有以下几点:

  • 稳定

    PostgreSQL的代码质量是被很多人认可的,经常会有人笑称PG的开发者都是处女座。基本上,PG的一个大版本发布,经过三两个小版本就可以上生产,这是值得为人称道的一个地方。从PostgreSQL漂亮的commit log就可见一斑,[PostgreSQL的COMMIT LOG](https://git.postgresql.org/gitweb/?p=postgresql.git;a=log;h=6912acc04f0bbcfdb799a120618507601e862490)
    
    而得益于PostgreSQL的多进程架构,一个连接的异常并不影响主进程和其他连接,从而带来不错的稳定性。
    
  • 性能

我们内部有些性能上的数据,TPCC的性能测试显示PostgreSQL的性能与商业数据库基本在同一个层面上。

  • 丰富

    PostgreSQL的丰富性是最值得诉说的地方。因为太丰富了,以至于不知道该如何突出重点。最全面的例子,可以找 自带博客外挂光环的 @德哥 。这里只列举几个我认为比较有意思的几点(查询、类型、功能):

    • 查询的丰富

      且不说HASH\Merge\NestLoop JOIN,还有递归、树形(connect by)、窗口、rollup\cube\grouping sets、物化视图、SQL标准等,还有各种全文检索、规则表达式、模糊查询、相似度等。在这些之外,最重要的是PostgreSQL强大的基于成本的优化器,结合并行执行(并行扫瞄、并行JOIN等)和多种成本因子,带来各种各样丰富灵活高效的查询支持。
      
    • 类型的丰富

      如高精度numeric, 浮点, 自增序列,货币,字节流,时间,日期,时间戳,布尔, 枚举,平面几何,立体几何,多维几何,地球,PostGIS,网络,比特流,全 文检索,UUID,XML,JSON,数组,复合类型,域类型,范围,树类型,化 学类型,基因序列,FDW, 大对象, 图像等。
      
      [PS: 这里的数组,可以让用户像操作JAVA中的数组一样操作数据库中的数据,如 item[0][1]即表示二维数组中的一个元素,而item可以作为表的一个字段。]
      
       或者,如果以上不够满足,你可以自定义自己的类型(create type),并且可以针对这些类型进行**运算符重载**,比如实现IP类型的加减乘除(其操作定义依赖于具体实现,意思是:你想让IP的加法是什么样子就是什么样子)。
       
      另外还有各种索引的类型,如btree, hash, gist, sp-gist, gin, brin , bloom , rum 索引等。你甚至可以为自己定义的类型定制特定的索引和索引扫瞄。
      
    • 功能的丰富

      PostgreSQL有一个无与伦比的特性——插件。其利用内核代码中的Hook,可以让你在不修改数据库内核代码的情况下,自主添加任意功能,如PostGIS、JSON、基因等,都是在插件中做了很多的自定义而又不影响任何内核代码从而满足丰富多样的需求。**而PostgreSQL的插件,不计其数**。
      
      FDW机制更让你可以在同一个PostgreSQL中像操作本地表一样访问其他数据源,如Hadoop、MySQL、Oracle、Mongo等,且不会占用PG的过多资源。**比如我们团队开发的OSS\_FDW就用于实现对OSS的读写**。
      

    至于其他的,举个简单的例子,PostgreSQL的DDL(如加减字段)是可以在事务中完成的 [PS: PostgreSQL是Catalog-Driven的,DDL的修改基本可以理解为一条记录的修改]。这一点,相信做业务的同学会有体会。

谈到与商业数据库的对比,这里有一张比较有意思的图,权作消遣:

数据库历史.gif

可以看得出来,PostgreSQL与很多商业数据库还是有一定历史渊源上的,大多是基于System R。

如果觉得不过瘾,再来点干的,看看PostgreSQL与这些数据库大厂这些年的恩爱情仇(图比较大,PG在左边最上面那条线,然后连着中间最上面第二条线)

RDBMS_Genealogy_V5.jpg

如何开始

业务从一个数据库迁移到另外一个数据库,不是一件容易的事。那么,你是否要考虑一下,在新的业务上尝试不同的可能?

关于选型,这篇数据库选型十八摸 之 PostgreSQL – 致 架构师、开发者可能会帮到你。

另外,这里有PG大神@德哥准备的系列的培训资料,和PG入门文档

而更多的资料,在云栖上搜索”postgresql”即可,这里是传送门:更多文章资料

Have fun!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/108590.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Vue.js学习的第一天

    Vue.js学习的第一天官网文档地址:传送门一、Vue介绍:1.Vue.js是什么?作者:2014年2月,尤雨溪曾就职于GoogleCreativeLabs和MeteorDevelopmentGroup。Vue(读音/vjuː/,类似于view)是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue被设计为可以自底向上逐层应用。Vue的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vu..

    2022年4月9日
    50
  • Modelsim10.4-win64软件下载安装与破解

    Modelsim10.4-win64软件下载安装与破解1.运行modelsim-win64-10.4-se.exe,安装软件;注意可以不用安装keydrivers,安装路径不要有中文(默认安装路径是C:\modeltech64_10.4) 2.安装过程中一直选择yes即可,注意可以不用安装keydrivers,最后是Done(如果不安装keydrivers)或reboot(如果安装keydrivers)询问,选Yes、…

    2022年5月23日
    46
  • 配置windows怎么关闭计算机,准备配置WINDOWS,请勿关闭计算机。

    配置windows怎么关闭计算机,准备配置WINDOWS,请勿关闭计算机。图片发自简书App早上,想着在台式计算机机上面进行修改些文字,但是,开机后屏幕上一直就是打开电脑后的那一行字:准备配置WINDOWS,请勿关闭计算机。一直那样子。弄得,弄得我没有办法进入机内去修改了。这样,过于依赖的机器之后,有的时候也是一种很不好的事情。回想原来,笔墨时代,就会简单。过去时代,人们生活中依赖机器的事情,并不多,虽说“工欲善其事,必先利其器”,但是所谓的“器”,那时候,不外乎也是些…

    2022年6月26日
    33
  • 用Python写了个工具,完美破解了MySQL!!(建议收藏)

    用Python写了个工具,完美破解了MySQL!!(建议收藏)再也不怕忘记MySQL的用户名和密码了,用这个工具可以秒破MySQL,冰河强烈建议收藏!!

    2022年5月31日
    33
  • 在CodeBlocks 开发环境中配置使用OpenCV (ubuntu系统)「建议收藏」

    在CodeBlocks 开发环境中配置使用OpenCV (ubuntu系统)

    2022年1月20日
    60
  • DDPG Project「建议收藏」

    DDPG Project「建议收藏」1.RememberthedifferencebetweentheDQNandDDPGintheQfunctionlearningisthattheTarget’snextMAXQvalueisestimatedbytheactor,notthecriticitself.(Incontinuousactionspace,the…

    2022年6月28日
    22

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号