首页 > 数据库 > 数据库开发技术 > PostgreSQL从入门到放弃?
时光荏苒,学习PostgreSQL有三个年头有余了,从刚接触的什么都不会到现在彻彻底底成为了PostgreSQL fans。在此想写点东西与大家分享一下我个人的PG学习之路,个人拙见,且当作茶余饭后消磨时间。
鄙人最开始在成都xx信息呆过(以免打广告之嫌),这是一家做PostgreSQL技术的公司,其实进这一家公司有点阴差阳错的感觉。因为刚毕业那会,PostgreSQL对于我来说是一个完全没有听过的数据库,大学只接触过SQLServer和SQLite,有点孤陋寡闻了(lll- -),而且17年那会,招聘信息上你搜PostgreSQL相关,基本看不到啥公司,与现在相比,真的是天壤之别。不过勤能方能补拙,没学过,学就是了。所以现在有时回想起来也没有想太通为何进了这家公司,当然这些都是后话,既来之则安之。
进去之后便彻底接触PostgreSQL了,因为基础薄弱,甚至可以说0基础,唯一技能就是写一点通用的SQL,比如select * ,insert into等等,对于其他稍微进阶一点的,就需要时刻打开度娘,问度娘了。不过既然遇到了问题,就去解决,逃避和拖沓是没用的。正好老大那里有一本唐成老师的书《PostgreSQL从小工到专家》,行吧,拿过来啃,有空就去看这本书,速度了一遍,然后仔细啃了两边,加起来看了三遍有余,目前时不时也会拿起来翻一翻,对于基础不扎实的还是十分有益的,可以让你快速上手,对PostgreSQL有一个大概的认知。当然肯定有看不懂的地方和仅仅是理论层面的知识,不慌,先记着,后面遇到了再来慢慢嚼。至此有了一定的PostgreSQL基础,可以开始逐步深入学习了,买更多的书来看,近年随着PostgreSQL社区的大力发展与推广,PostgreSQL这个数据库也逐步被人熟知,接受,看看最近的发展趋势就可见一斑。


可以看到,PostgreSQL相关的书籍还是十分之多的,在此只罗列了部分,还有张树杰老师的《PostgreSQL技术内幕》、陈河堆老师著作的《深入浅出PostgreSQL》都是很不错的教材。
学习一门数据库,除了要“学”,方向也要选对,现在无外乎两个方向:1、往DBA方向走 2、往底层内核走,二者各有千秋,各有特色。首先聊聊DBA,我个人主要DBA,当然要干好DBA,还需要尽可能的多去看看源码,多学习底层的知识。DBA需要的技能个人觉得要广一些。就拿PostgreSQL来说,DBA需要做什么呢?运维、调优这些都是基本技能,肯定是要必备的。既然要运维、调优,你就得去懂这些东西,比如调优,怎么样才算调优呢?把postgresql.conf配置文件给你,里面的每个参数你都懂是什么意思吗?wal_writer_delay和bgwriter_delay给到你让你调,你不清楚这二者参数对应的后台进程,不了解对应的原理你就无从下手;又比如遇到IO瓶颈了,给你checkpoint_compeletion_target、fsync、full_page_writes、commit_delay等等,你不懂这些参数什么意思,当然也无法下手。假如你硬说,我有一套“通用”的调优参数指南,我硬背下来,比如shared buffer设置为RAM的25%,不超过40%,那我遇到一个场景就这么调,那我也不能说啥,只是一套参数应变N种场景,还是很有局限性的,就比如TPCC的测试PK场景,shared buffer就会尽可能地给得多,我给你70%的RAM尽可能让所有的warehouse都在数据库“自己”的内存中,减免双缓存带来的影响。再者给你一个300行的SQL,你知道如何调优吗?只会加一个Btree索引也是万万不够的,PostgreSQL的索引多达七种之多,其次你必须得看懂执行计划,你才能对症下药,再加上各种各样的调优技能,诸如物化视图、CTE、并行等,说到并行,也是上一篇写到的,之前对并行不熟悉,只知道好像有那么几个参数,结果实际项目中遇到了,开了并行后,性能提升了五六倍,所以又转战并行,去总结整理,下次遇到了就不会再无从下手。所以这些都得去学好,才能让你更好地做好这些。
目前我已从传统的单机转向了分布式,TBase,才发现之前的那些理论和知识完全不够用,因为单机和分布式是两套完全不同的架构,适用于以前PostgreSQL的参数,对于分布式数据库来说,可能就有些出入,再加之分布式相较于单机而言,需要了解的硬件知识更多,和硬件的关联更加大。目前每天就需要去恶补硬件知识,存储比如SAN、NAS的区别和适用场景,Pcie和传统的SATA、SAS的区别和优势,大致的读写速度,服务器架构诸如SMP、NUMA等,IO调度策略的区别和适用场景等等等等,都是需要去了解和不断学习的,只有这样才能紧跟时代的发展。
第二就是内核方向,我身边搞内核的朋友也不在少数。个人而言,他们就是钻的深钻的精,但是相对DBA而言就不需要钻的太广。你让他们给你讲解checkpoint,可能从前到后怎么调用的,对应的底层函数诸如CreateCheckpoint、CheckpointGuts等,都可以给你说的一清二楚,改代码重编译都是家常便饭。但是内核方向,没个一两年很难入门,现在的数据库开源代码动辄几百万行,没有引领和指导去层次化地学习,全由自己来摸索就好比丈二和尚,是比较困难的。当然并没有任何其他之意,但是好在PostgreSQL的源码十分规范,易读性十分高,代码可以当文档看,看看其中的注释就可以对原理知道个七七八八,相比之下,MySQL的代码中经常有类似xxx_function,xxx_function2,another_xxx_function2这种奇怪的函数名字,而且毫无注释完全不明所以。钻研内核还是十分有趣的,现在犹记得海波老师在钉钉群分享的《源码研究方法论 - PG篇》中,演示的那些功能和代码追踪,把PG的底层原理展示地一览无遗,真是乐趣无穷,所以平时有空还是多看看源码,看PostgreSQL的代码是学C很好的模板,哪怕只看看注释和README都很有用。
随着学习久了,就不应该局限于书籍了,尽信书则不如无书。可以多搜搜网上的资源,github如德哥、若航、陈华军等,都写得十分全面和精彩,国外的博客诸如mojian、habr、2ndQuadrant、EDB等,再加上国内目前的中文社区、各种公众号、各种学习资源群,这些都是资源,所以提供给我们利用并转化为自己知识的渠道很多,关键是自己如何去对待和学习,怎么转化为自己的。还有值得一提的是,多写写是一件十分值得推崇的事,通过写下来,你会发现以往的知识漏点,顺便再帮你整体回顾一遍相关知识,写下来总结下来,化散归一,对这一片的知识你会理解更深,就不仅仅局限于存在于大脑的零零散散。
加之目前我国新基建的大力发展和中美两国的局势,自主可控越来越重要,国产数据库的声音也越来越大,基于PostgreSQL的开发的数据库越来越多,比如我目前从事的Tbase、刚刚开源的GaussDB、AntDB等。所以,学好数据库,学好PostgreSQL,碰到有PostgreSQL影子的数据库都可以快速上手、建设,对于个人来说,百益无一害。
PostgreSQL发展潜力巨大,希望更多的人能认识和爱上PostgreSQL。
原文作者:PostgreSQL学徒;如有侵权,请联系管理员删除。