1. 聚能聊>
  2. 话题详情

讨论PostgreSQL 和其他数据库的差异在哪里

PostgreSQL 近几年在全球的人气不断攀升,每年发布的版本都体现了社区的活力,9.6作为里程碑式的作品,更加有非常多的新特性加入。

PostgreSQL_Banner_orange_728x90

screenshot

例如

1. 多核并行计算
screenshot

2. FDW 下推join, sort, where clause.

3. snapshot too old

4. 检查点平滑fsync

5. vacuum freeze加速

6. sharding base on fdw
screenshot

7. 分词增强,支持相邻phrases搜索,据说比ES用起来还爽。

8. scale-up 多核增强, 72HT的机器tpc-b select only达到了180万的tps.

9. 推出等待事件统计信息

10. 支持多副本同步复制,满足金融级可靠性要求
screenshot

11. 聚合复用SFUNC,多个聚合如果INIT和SFUNC一致的话,可以节约非常多的运算开销。

12. 事务idle超时机制

还有很多,可以在 release notes页面查找
https://www.postgresql.org/docs/9.6/static/release-9-6.html
screenshot

除此之外,社区开发的一些特性也很吸引人,例如

1. rum插件,支持文本相似度查询,效率嘛10亿级别TOKEN,毫秒级响应,比搜索引擎还好用,具体见云栖社区的测试文章。

2. LLVM版本的PostgreSQL,对大数据量的表达式处理性能提升非常明显。也是大数据处理惯用的手法,例如Impala。虽然PostgreSQL的定位是OLTP,但不代表它不能处理OLAP的请求,而且Gartner去年就提出了HTAP的数据库概念,指即能处理TP有能处理AP的数据库产品,PostgreSQL的特性可见一斑。

3. 10.0版本已经加入的聚合算子下推,你是不是开始浮想联翩了呢?

更多的插件可以到github , pgxn.org , pgfoundry , 以及PostgreSQL生态体系的很多公司的官网等网站查找。

同时也期待大伙来关注云栖社区的PG圈子,参与PostgreSQL的各种技术社交活动。

_

但是如果把PostgreSQL和其他数据库拉到一起来比较,他们有什么差异呢?

我的理解是这样的

screenshot

screenshot

screenshot

screenshot

《众里寻它千百度:周正中(德哥)细数从Oracle到PG这些年的摸索与发现》

http://geek.csdn.net/news/detail/113982

不知道你是怎么看的呢?一段话描述一下你对PostgreSQL的印象吧,有简短的案例分享更好。

参与话题

奖品区域 活动规则 已 结束

  • 奖品一

    淘公仔 x 5

  • 奖品二

    优酷VIP季卡 x 3

70个回答

5

lifubang 已获得淘公仔 复制链接去分享

我们今年从mysql迁移到了postgresql 9.4,已经有快上亿的数据了,而且都是复杂的查询,也有jsonb查询,在同等硬件条件下,确实比mysql稍微强点,至少不会差,而且从mysql迁移到pg过程也比较顺利(不过还是有些修改的)。
我想咨询一个问题,@digoal 或其他pg专家,由于我们有些数据源还在mongo上,mongo_fdw的这个问题解决了吗:prepared statement cann't push down. ?如果这个问题解决了,就完美了。

另外,在使用mongo_fdw的过程中,原生的mongo_fdw有很多问题,我修改了好多源码,具体见connection pool reconnect after the mongo server restarted,也没有得到官方的任何回应,不知是否有问题,但是我们修改源码后,确实解决了很多问题:
1、修复mongo重启后pg无法自动重连mongo;
2、修复了无法连接mongo副本集,连接副本集可以做到读写分离、高可用;
3、修复了NumberLong不兼容NumberInt的问题;
4、修复了不能自定义_id的问题;
我觉得,这些问题解决后,我们的mongo_fdw用得顺手多了,在业务过程中也没发现问题,为啥官方没人回应呢?如果有问题,至少应该指出来呀,不然我们的业务也会跑得很心惊胆战。

德哥 回复

HI,mongo_fdw主要是EDB在维护的一个开源插件,你可以尝试一下把patch提交给他们,一起把mongo_fdw搞好。开源软件是要靠大伙的力量来推进的。再次感谢您的支持。

lifubang 回复
回复@德哥:

再问一下,9.6新特性里面有一条:FDW 下推join, sort, where clause. 那也就是说,9.4的postgres_fdw的join sort where不支持下推吗?
如果不支持下推,那如果我要跨库join,有什么好的方案?

德哥 回复

支持下推,比如同一个分片的数据,不同的表,发生了JOIN,是不需要上传数据的。

评论
3

sikyo 已获得淘公仔 复制链接去分享

最关注的应该还是并行吧,目前也是在学习这方面的实现
大概是10年前,有篇database相关的paper说数据库应该面向现代机器架构重新设计。
随着disk的瓶颈逐渐解决,cpu没有有效利用是个痛点
机器的高效利用,意味着节省硬件成本。单节点的应用场景还是存在的,对环境以来也低。
PG的PQ架构早就有些准备了,PG9.6才发布,还要经历评测和改进。scan的并行还不够,PG能有强大的并行,意味着未来也很容易拓展成分布式或者MPP。

窦贤明 回复

pg的版本一向算是比较稳定的

窦贤明 回复

分布式或mpp跟单机的并行度倒不大。单机并行提高的还是单机的能力

德哥 回复

恩目前PG的并行支持SEQ SCAN,聚合,哈希JOIN。 从社区发展来看,后面肯定还会支持更多。 越来越趋于HTAP了。

sikyo 回复

并行部分的代码,从共享内存里抢block的机制,或许有点粗糙,有锁的开销,大数据量情况下能不能也很稳定

sikyo 回复
回复@德哥:

如果PG成为成熟的HTAP方案,那选型上以后就省不少精力了⛽️

sikyo 回复

如果任务切分做的好,多机并行也好做吧

窦贤明 回复
回复@sikyo:

当前PG 9.6的并行还比较简单,是有值得优化的地方的。多机并行不止是任务切分,最麻烦的我觉得还是事务。

评论
3

seifer08ms2 已获得优酷VIP季卡 复制链接去分享

最关注的就是postgis的空间数据库以及madlib的数据挖掘功能,以及pg丰富的数据类型和强大的性能。

德哥 回复

可以讲讲您的案例吗

seifer08ms 回复
回复@德哥:

德哥好,我们做房地产数据,非常需要postgis的空间查询功能以及madlib的机器学习模型,因为数据库还没迁移到pg上所以还没有案例可以分享。

评论
0

feicai 已获得淘公仔 复制链接去分享

逻辑复制,我觉得是一个重大的改进,postgresql 的流复制备库的查询冲突是个很头痛的问题,有了逻辑复制就解决了问题,接下来能不能做到像搭建MySQL那样方便的逻辑复制

德哥 回复

可以呀,PG9.4开始支持逻辑复制了,外围很多插件都支持自动化的逻辑复制,例如2ND的UDR,BDR,PG LOGICALREPLICA,还有阿里云也有开源的产品dbsync,代码在GITHUB上,支持从MYSQL增量复制到PG,也支持PG到PG之间的增量复制,还有PG到GP的复制。

德哥 回复

查询冲突是可以解决的呀,有很多配置可用控制冲突的,比如配置vacuum延迟,备库FEEDBACK,还有备库的APPLY冲突延迟。可以解决冲突的问题。另外有一篇文档您可以参考一下,里面有解释冲突和解决冲突的细节。https://yq.aliyun.com/articles/58421

评论
0

lottu 已获得优酷VIP季卡 复制链接去分享

相比oracle来说;我想说下下面几点。

  1. 闪回特性;oracle在11g之后提供一种快速恢复数据库的特性--闪回特性。这个在误操作(drop/truncate表,删除用户,删除表空间;未删除数据文件)这个在一定时间范围内可以快速闪回过去;在没有备份的情况下。而postgres由于对事务修改数据的管理方式采用不同方式。导致没法实现该特性。
  2. 坏块的处理;oracle提供了多种对坏块的处理;处理结果可以实现坏块上的记录可以修复;而postgres则不然。
  3. 分区表; 目前postgres插件--pg_pathman对分区表有很大的支持;但没法使用全局索引;在跨分区条件会存在差异;虽然影响不大。
德哥 回复

1. pg支持回收站的功能,通过HOOK即可实现闪回,DDL很使用HOOK容易实现闪回,DML闪回可以通过多版本来实现。
2. 坏块方面,PG通过FPW和CHECKSUM,可以完全避免写坏块,例如避免数据库、操作系统崩溃后造成坏块。如果你不信邪,没有开启FPW,造成了坏块,那么PG目前支持扫描时跳过坏块的方式处理。
3. 分区表,目前不支持全局索引,功能缺失,不过社区有这块的TODO,相信将来会支持的。 如果业务对这块是强依赖,建议调整策略。

评论
0

寒喵 已获得优酷VIP季卡 复制链接去分享

PostgreSQL的同步复制功能,添加了两个选项,使它能够用于数据库集群一致读取维护。 首先,它现在允许配置一组的同步的复制数据库。 第二,“remote_apply”模式创建多个跨数据节点的一致的读视图。 这些功能使用内置的复制来维护一组的“相同的”节点实现,可以用于数据库的读负载均衡。

postgres_fdw(PostgreSQL-to-PostgreSQL数据外部表驱动程序)提供了新的功能, 支持在远程服务器上执行操作。 通过“下推”(Push Down)排序(sort),Join联接,批量数据更新(update)任务, 用户可以调度多个PostgreSQL服务器来完成数据查询。 这些功能很快会添加到其他fdw模块中。

德哥 回复

多副本的同步复制使得数据库的可靠性又上了一个台阶。

评论
1

温金兰 已获得淘公仔 复制链接去分享

并行运算是最大的区别。

1

初码 已获得淘公仔 复制链接去分享

没有在生产中用过PostgreSQL,只了解过相关方案,看到第一点多核并行计算,就想到了Postgres-XL估计会做出重大更新,祝和Oracle对抗的PostgreSQL发展的越来越好哈哈~

0

君子爱财 复制链接去分享

不知道postgresql在多租户比较多数据下性能如何?但是,postgresql版本更新有点头疼,要卸载重装

德哥 回复

版本更新其实还蛮简单,通常小版本更新直接换binary重启就好了(详见对应版本的release notes)。如果是大版本升级,可以用导出导入,或者逻辑复制,或者是迁移元数据的方式完成(手册里都有,我的BLOG里也写过对应的例子)。

德哥 回复

PG的性能指标一直都是很棒的,Oracle 12C的多租户(PDB)也是受PostgreSQL的设计影响搞的。PG的database天然就是多租户的概念,隔离彻底。

窦贤明 回复

用不同的目录不就好了吗,为啥要重装?

评论
1

虹天 复制链接去分享

我是一个新手,是不是fsync也实现了类似于group commit的概念

窦贤明 回复

将fsync中的数据提前刷盘,缓解checkpoint的时候同步io的问题。

德哥 回复

group commit和fsync平滑化是有区别的,group commit主要是减少IO的次数尽量的合并IO。 fsync平滑化的主要目的是消除大锁,手段比较多,包括block排序, sync file range,主要是消除大锁。

评论
2

lqx 复制链接去分享

最近在考虑选型,将部分数据库功能迁移到这上面 ... 暂时测试性能不错

德哥 回复

可以描述一下您的业务场景和测试场景吗,在哪些方面是您觉得不错的?

评论
0

蓝云计算 复制链接去分享

谁家在用?

窦贤明 回复

很多家在用的,云栖社区里有很多类似文章。平安(金融领域)、腾讯、阿里、去哪儿等很多大公司都有很多PG的实际案例,更别说很多其他的公司了

评论
0

lottu 复制链接去分享

我所熟悉的数据库有oracle,postgres,greenplum;greenplum是postgres的延伸版。
所谈下oracle相比postgres数据库有哪些优势;

  1. 闪回数据库;在oracle11G之后提供了一种闪回机制;flashback data1base/table闪回到过去的某一时刻(默认是可闪回区间时间为24H);
    个人感觉该机制挺方便的;例如误操作truncate/drop/delete/update表;删除用户;删除表空间(未删除数据文件);这些操作都可以闪回;这个对数据恢复提供一个保障。
  2. 对坏块的处理;oracle对坏块处理提供了多种方法,把坏块上的数据可以恢复;然postgres则不然。
  3. 对分区表上的处理;前不久看了德哥《pg_pathman》插件的讲解;对postgres分区有很大的支持;但是使用《pg_pathman》插件;需要禁用主表扫描;

    所没法有全局索引;虽然对带有分区条件影响不是很大。个人认为后期版本会对postgres分区有更进度的支持
  4. 在说下sql;oracle有需要特有的语法;例如model,connect by,merge into。虽然postgres可以用with as语法替换。但是在算法上和美观性,简易性上来说;“呵呵”。
    个人见解!细节有所遗漏;大家可以继续接上!
德哥 回复

不是因为禁用主表扫描导致的不能使用全局索引。是本身就不支持全局索引。
并不是PG没用能力支持ORACLE的语法,我想说的是oracle的语法并代表SQL标准,哪天Oracle提出的语法成为标准了,相信PG会去支持它。从PG支持SQL标准的速度可见一斑,出了新的SQL标准,PG都会很快的支持。

评论
0

游客qxwc5eoceufuo 复制链接去分享

还没用过PG,对他原生支持JSON很感兴趣。是否有MSSQL和ORACLE转向PG的专用工具?

德哥 回复

有,网上挺多的,可以谷哥搜一下。PostgreSQL的WIKI里也有许多关于迁移的文档。

评论
1

mali2004abc 复制链接去分享

我目前用Mysql或者Sql Server。我这个层次的开发者目前还接触不到什么大数据的业务需求。我是来了解和学习PostgreSQL的,给自己充一下电。

窦贤明 回复

PG不止是可以用于大数据的场景,关系型务场景都可以的
SQL Server在历史上与PG很有渊源,MySQL针对相对比较简单的业务。

评论
0

1307076325917944 复制链接去分享

专业数据分析

德哥 回复

恩,数据类型可以自己定义,扩展比较方便。

评论
0

1000076152057185 复制链接去分享

那里有?我要送的(优酷)

德哥 回复

给你留着,快来讨论呀。

评论
0

a122781876 复制链接去分享

说好的储值卡通用 我充值了100元 给我来个只能买云服务 不能买域名 我买来做啥 你个骗子

德哥 回复

可以打客服电话投诉的。

评论
0

mustang2247 复制链接去分享

我关注查询和写入性能

德哥 回复

可以搞一场比赛,一起来玩一玩。

评论
0

饿了否 复制链接去分享

如果自带mysql 完美导入就好了?两次转向 pg失败了

德哥 回复

建议尝试一下阿里云开源的dbsync软件,支持MYSQL迁移PG。

评论
4