张文升认为,PG无论在可靠性和性能方面都不输其它任何关系型数据库
张文升,探探DBA,负责探探的数据库架构、运维和调优的工作。拥有8年开发经验,曾任去哪儿网DBA。
9月24日,张文升将参加在北京举办的线下活动,分享PostgreSQL在互联网应用的一些经验。值此,他分享了个人的一些经历,以及对PG的一些看法。
想和这些大咖面对面聊PG吗?点击这里>>>
免费报名
正文:
初接触PG,“What?什么是PG?”一脸懵圈——张文升用时下比较流行的一个词儿形容当时的心情,而且他们的Team也是一身抵触情绪。但动手操作和实验一段时间后发现,PG是一个对开发者非常友好,并且稳定好用的关系型数据库,由此他开始迷上PG。
PostgreSQL非常棒,如何让更多人知道并使用它?仅仅开发基于PG的应用已经不能满足张文升的求知欲。他除了成为专业的基于PG技术售后技术支持外,还和一帮热爱PG的人,身体力行的推广着PostgreSQL在国内的使用。“我愿意和他们一样,为了自由和开源,贡献自己的一份绵薄之力。” 张文升说。
“网络上有很多文章,可能是年代太久远,也可能是其它原因,都认为PG只适合做OLAP,不适合在互联网的应用。数据分析是PostgreSQL的强项,多表join、丰富的FDW、窗口函数等在数据分析都有很大的优势,这一点毋庸置疑。事实上,做OLTP应用,PG无论在可靠性和性能方面都不输其它任何关系型数据库,包括商业和开源的关系型数据库。”为什么要分享PG在互联网应用,张文升在采访中如此说到。
“我想和大家说的是:PG在互联网应用中,同样跑的很欢畅。” 他用过去的事实进一步说明,“例如我的前东家去哪儿网,instegram等互联网公司都大规模的使用PG来支撑海量业务。”
对于上段时间Uber从PG切换为MySQL一事,张文升认为这只是一个很普通的商业公司的行为,但他也指出这是一个不负责任的行为,“Uber工程师把自己搞不定的问题归咎到数据库产品本身,会让很多业内人士错误的认为PostgreSQL很糟糕。”
“很有可能,过几年Uber工程师又会从MySQL迁移到其它数据库......” 他最后还打趣到。
更为具体的内容,请查看以下完整采访:
云栖社区:请介绍下你以及所从事的工作。
张文升:大家好,我叫张文升,曾任去哪儿网DBA,今年7月初加入探探,任探探的DBA。刚毕业工作时,我是从开发做起,也就是“程序猿”,做了近八年的开发之后转行做了DBA,那几年的开发经验,为我日后从事DBA打下了很好的基础,专门从事数据库的运维工作又有好几年了,时间不长也不短。
目前我的工作主要负责探探的数据库架构、运维和调优的工作。探探是一家不大的公司,目前只是C轮,我们的DBA团队也比较小,一共只有三个人,但是个小而精的团队,另外两名DBA同事都非常给力,我们相互学习,各司其职。
云栖社区:能聊聊你是如何和PG结缘的?
张文升:在从事开发的那几年,经常和各种数据库打交道,包括MS SQL
SERVER,ORACLE,自认为对数据库比较了解了。
大约是在2008年的时候,我当时所在的公司有一个某岛国的项目,这个项目在需求书上明确提出了使用PostgreSQL作为后端数据库......我很愿意用当下比较流行的一个词儿形容我当时的心情:“一脸懵圈”!What?什么是PostgreSQL?我们的Team也是一身的抵触情绪,为什么不用我们都最熟悉的ORACLE?但为了顺利的拿下项目,我还是硬着头皮,从Google搜索、下载、阅读文档,从零开始学习PostgreSQL。
说到这里,其实大多数开发都有过为了完成某个有特定需求的项目,短时间攻克一项陌生技术的经历,项目完成后,那项技术就抛在脑后了。但我花了几周的时间读PostgreSQL文档,动手操作和实验了一段时间之后,仿佛打开了一扇新的门,发现PostgreSQL是一个对开发者非常友好,并且稳定好用的关系型数据库;从商业层面讲,它还是BSD协议的,可以免费使用的开源数据库。
我开始尝试在大大小小的项目中开始用它,它的表现也从没有让我失望。慢慢的,我就迷上了PostgreSQL,仅仅开发基于PostgreSQL的应用已经不能满足我的求知欲。在几年以前,一个非常好的机会,我加入了EnterpriseDB(PostgreSQL的一个商业版本,也称为PPAS)中国区的一家公司,成为了专业的基于PostgreSQL技术的售后技术支持。
从此,我开始了我的PostgreSQL职业生涯,先后服务了多家使用PostgreSQL的企业。
云栖社区:你是如何从一名使用者,逐渐成为PG社区核心成员和志愿者的?
张文升:我身边有很多和我一样很喜欢PostgreSQL的朋友,我们经常一起讨论关于PostgreSQL的问题,几年以前我们经常会聊起一个相同的话题:PostgreSQL非常棒,我们如何让更多人知道和使用它?我慢慢的认识了目前我们PostgreSQL社区的主席萧少聪,以及上一任PostgreSQL社区主席李元佳,还有开源数据库圈赫赫有名的PG大学校长德歌。知道了其实有一帮人和我一样,热爱自由和开源,热爱PostgreSQL,并在身体力行的推广着PostgreSQL在国内的使用。我愿意和他们一样,为了自由和开源,贡献自己的一份绵薄之力。
云栖社区:作为拥有多年项目经验的开发者,你对哪个项目中应用PG的过程记忆深刻,为什么?
张文升:我不做开发已经有好几年了,很多的项目已经没有印象了。但是第一个使用PostgreSQL的项目依然记忆深刻。并不是用到了什么特殊的技巧,而是学习PostgreSQL的过程很奇妙,例如PostgreSQL 8.4之后Peter Eisentraut重新操刀的psql命令行:
哦...使用“\l“命令就可以列出实例中所有的Database了;
哦...使用“\watch
n”命令就可以像Linux的watch命令一样循环执行一条命了了,省去了写脚本的麻烦;
总之,各种大的小的惊喜。学习了PostgreSQL之后,也有了一条心得:对于自己不熟悉的数据库,亲自尝试并理解它的设计意图,深入之后会发现新的方法可能是更优解。
云栖社区:你是如何看待PG优劣的?
张文升:这个问题讨论的太多了,我不太想说太多了,几个关键词简单概括一下。PostgreSQL是BSD的开源关系型数据库,严格的事务支持,支持多种语言的存储过程、数据类型和索引类型丰富、PostGIS、ODL,即将发布的9.6中还有Parallel
execution,非常令人期待。当然,PostgreSQL也有不完善的地方,例如没有原生Partition等。
云栖社区:在PG运维上,是否有什么经验和大家分享下?
张文升:数据库是门很复杂的学问,每个数据库有各自的特点,PostgreSQL中国社区的很多同行在PostgreSQL的高可用、高性能上都积累了不少经验。如果大家感兴趣,可以去社区官方网站翻阅近几年大家在PG大会上贡献的话题的文档。
云栖社区:能否罗列下,在本次演讲中,你将会分享哪些点?另外,你有什么话想提前和与会者说吗?
张文升:这次话题我主要想分享PostgreSQL在互联网应用的一些经验。
网络上有很多文章,可能是年代太久远,也可能是其它原因,都认为PostgreSQL只适合做OLAP,不适合在互联网的应用。数据分析是PostgreSQL的强项,多表join、丰富的FDW、窗口函数等在数据分析都有很大的优势,这一点毋庸置疑。事实上,做OLTP应用,PostgreSQL无论在可靠性和性能方面都不输其它任何关系型数据库,包括商业和开源的关系型数据库。例如我的前东家去哪儿网,instegrem等等互联网公司都大规模的使用PostgreSQL来支撑海量业务。所以我想把我的PostgreSQL互联网实战经验与大家分享,算是抛砖引玉。我想和大家说的是:PostgreSQL在互联网应用中,同样跑的很欢畅。:-)
云栖社区:你对上段时间Uber从PG切换为MySQL一事怎么看?
张文升:关于Uber从PG切换为MySQL,前一段时间网络上炒得沸沸扬扬,我也仔细看过Uber工程师的文章,还有很多与Uber工程师不一样观点的文章,例如阿里云德哥对Uber从PG切换为MySQL的分析,《SQL Performance Explained》作者对此事件的分析,都非常中肯。
我对Uber这家公司不了解,个人认为Uber从PG切换到MySQL,只是一个很普通的商业公司的行为,例如换了leader、换了DBA...因为Uber在2013年也曾经从MySQL迁移到了PostgreSQL......,但是Uber工程师把自己搞不定的问题归咎到数据库产品本身,会让很多业内人士错误的认为PostgreSQL很糟糕。很不负责任的妄议一项技术,这一行为我认为非常不可取,而且,通常来说从MySQL到PostgreSQL的迁移成本会比较低,而从PostgreSQL到MySQL的迁移成本会比较高。
PostgreSQL有一个非常开放的技术社区,如果有问题不能解决,可以发送问题邮件到全球开发组织的邮件组,很快可以得到成千上万热心的hacker帮助。
很有可能,过几年Uber工程师又会从MySQL迁移到其它数据库......
- Smart3D系列教程2之 《为什么三维重建效果这么差?——探探那些被忽略的拍照要求和技巧》
一.照片采集的实用概念 根据照片进行三维重建的过程中,有人没怎么遇到坑,有人被坑的不轻.可能是模型的纹理失真,模型的法线错了,模型会生成我们各种也想不到的结果,那么,是什么导致三维重建效果这么差的?是 ...
- 从字节跳动离职后,拿到探探、趣头条、爱奇艺、小红书、15家公司的 offer【转】
前言 博主目前从事Android开发3年,前两年一直在抖音工作.我这篇文章并不是简单的描述一些面试中的题,或者总结一些Android的知识,而是想记录我整个的想法和准备的过程,以及一些心得体会,让大家 ...
- YY孵化虎牙,陌陌收购探探:你更看好谁?
近日欢聚时代公布了2017第四季财报和全年财报,表现不错.其CFO 金秉表示,虎牙最近向美国证券交易委员会(SEC)提交了注册上市申请书草案文件,可能会在美国IPO上市,以便获取自己的投资者群体以融资 ...
- Nuxt|Vue仿探探/陌陌卡片式滑动|vue仿Tinder拖拽翻牌效果
探探/Tinder是一个很火的陌生人社交App,趁着国庆假期闲暇时间倒腾了个Nuxt.js项目,项目中有个模块模仿探探滑动切换界面效果.支持左右拖拽滑动like和no like及滑动回弹效果. 一览效 ...
- iOS:仿写探探App动画
一.简单介绍 探探动画比较新颖,这也是它在众多交友软件中火热的一个特色.实现这种动画的方式可以有两种方式实现: 1.使用转场动画实现 2.使用CollectionView自定义布局实现, 此处我提供 ...
- 腾讯云AI平台张文杰:构建一站式机器学习服务平台
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 5月24日,以"无界数据无限智能"为主题的腾讯"云+未来"峰会AI大数据分论坛在广州拉开帷幕.此次分 ...
- 【SQLAlchemy】SQLAlchemy技术文档(中文版)(中)
10.建立联系(外键) 是时候考虑怎样映射和查询一个和Users表关联的第二张表了.假设我们系统的用户可以存储任意数量的email地址.我们需要定义一个新表Address与User相关联. from ...
- SQLAlchemy技术文档(中文版)(中)
10.建立联系(外键) 是时候考虑怎样映射和查询一个和Users表关联的第二张表了.假设我们系统的用户可以存储任意数量的email地址.我们需要定义一个新表Address与User相关联. from ...
- ADO.NET事务处理,初始回调函数,多张表的数据在同一个DataGridView中展示
执行ADO.NET事务包含四个步骤,接下来以Transaction对象为例介绍. (1)调用SQLConnection对象的BeginTransaction()方法,创建一个SQLTransactio ...
随机推荐
- Bootstrap-datepicker日期时间选择器的简单使用
日期时间选择器 目前,bootstrap有两种日历.datepicker和datetimepicker,后者是前者的拓展. Bootstrap日期和时间组件: 使用示例: 从左到右依次是十年视图.年视 ...
- geatpy - 遗传和进化算法相关算子的库函数(python)
Geatpy The Genetic and Evolutionary Algorithm Toolbox for Python Introduction Website (including doc ...
- Windows开发经验 - WinDbg
1. 远程调试 参考文章:https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/remode-debugging-usi ...
- 毫秒查询9位数qq号码是否存在-BitMap算法应用
实现详情请查看博客园 https://www.cnblogs.com/caoke/p/10793885.html 随机注册10万个放入BitMap,然后查询qq号码是否已存在,算法复杂度O(1). / ...
- 关于微信企业号操作api的sdk封装 (.net)
做微信的第三方开发业半年多了 现在献上微信企业号的操作sdk(包括源码) 本人水平有限 望大家多提意见 下载地址献上:下载
- Java基本数据类型-包装类
为什么会有基本数据类型包装类? 将基本数据类型封装成为对象,这样可以在对象中定义更多的方法来操作该数据 包装类常用操作就是用于基本数据类型与字符串之间的转换 基本数据类型对应的包装类 byte(Byt ...
- $scope作用域与依赖注入
一.$scope与$rootscope作用域 $scope下的数据作为该控制器下的数据moduel,只有在该控制器下才能够访问:而$rootScope则可以可以再任何有效的地方访问到,这个有效的地方指 ...
- SpringMVC中配置AOP拦截controller 失效
来源:http://www.oschina.net/question/222929_124314 目测大部分同学的aop失效都是因为在springmvc的配置文件里面扫描了类,那么spring去扫描的 ...
- orcale 之 PL/SQL的游标
根据我们之前了解到的情况,SQL是面向集合的,我们的查询结果一般包含多条数据,而在PL/SQL 中的变量一般只能存放一条数据,因此变量是无法满足我们的需求的.这时候我们就需要引入游标来为我们解决问题了 ...
- json test
public static void main(String[] args) { class B { String name; public String getName() { return nam ...