PG大版本特征矩阵:

    https://www.postgresql.org/about/featurematrix/

    近些年,Oracle也开始和PG一样每年都在发版本。今年oow发布了20c,我们看一下20c支持了那些特性:可以参考盖老师发布的如下文档

    pic

    实际上在Oracle发布的新特性里面,有大多数特性在PG内核或扩展模块已经支持(主要原因是PG的架构非常灵活,可以很方便的开发扩展功能,同时允许被商业或非商业的形式使用):

    《PostgreSQL Oracle 兼容性 - Oracle 19c 新特性在PostgreSQL中的使用》

    来看一下20C里面PG有哪些是已经覆盖的功能呢?

    这个特性在PG 中的支持方法

    https://github.com/postgrespro/pg_credereum

    2. 持久化内存存储支持 - Persistent Memory Store

    pic

    3. SQL的宏支持 - SQL Macro

    这个特性在PG 中的支持方法

    pic

    新的位运算符也被引入,20c 中支持的新的位运算包括:BIT_AND_AGG、BIT_OR_AGG、BIT_XOR_AGG 。

    这个特性在PG 中的支持方法

    https://pgxn.org/dist/aggs_for_arrays/

    5. 自动化的In-Memory 管理 - Self-Managing In-Memory

    In-Memory 技术引入之后,为Oracle数据库带来了基于内存的列式存储能力,支持 OLTP 和 OLAP 混合的计算。

    6. 广泛的机器学习算法和AutoML支持

    pic

    在Oracle 20c中,更多的机器学习算法被加入进来,实现了更广泛的机器学习算法支持。

    极限梯度助推树 - eXtreme Gradient Boosting Trees(XGBoost) 的数据库实现,以及各种算法,如分类(Classification)、回归(regression)、排行(ranking)、生存分析(survial analysitic)等;

    MSET-SPRT 支持传感器、物联网数据源的异常检测等,非线性、非参数异常检测ML技术;

    这个特性在PG 中的支持方法

    https://pivotal.io/cn/madlib

    在20c之前,多租户的数据库管理是服务驱动的,通过服务来决定PDB的资源放置,PDB的开启也是通过服务来进行隐式驱动的。

    在集群环境中,这就存在一个问题,PDB 可能被放置在某个资源紧张的服务器上,服务驱动的模型并不完善。

    在 20c 中,Oracle 引入了细粒度的资源模型,将负载和 PDB 的重要性等引入管理视角。例如,用户可以通过Cardinality 和 Rank 定义,改变 PDB 的优先级,在数据库启动时,优先打开优先级别高的PDB。

    这个特性在PG 中的支持方法

    《PostgreSQL 用户、会话、业务级 资源隔离(cgroup, 进程组, pg_cgroups) - resource manage》

    8. 零影响的计划停机维护 - Zero Downtime for Planned Outages

    pic

    在 Oracle 不同版本的不断演进中,一直在加强数据库的可用性能力。在 20c 中,对于计划停机维护或者滚动升级等,Oracle 通过 Smart DRM 等特性以实现对应用的零影响。

    对于维护操作,数据库可以在实例关闭前进行动态的资源重分配,这一特性被称为 Smart DRM,通过GRD的动态资源重组织,重新选出的Master节点不需要进行任何的恢复和维护,对于应用做到了完全无感知、无影响。

    9. In-Memory 的 Spatial 和 Text 支持

    针对 Oracle 数据库内置的多模特性,地理信息 -Spatial 和 全文检索 - Text 组件,在 20c 中,通过 In-Memory 的内存特性,获得了进一步的支持。

    对于空间数据,Oracle 在内存中为空间列增加空间摘要信息(仅限于内存中,无需外部存储),通过 SIMD 矢量快速过滤、替换 R-Tree 索引等手段,以加速空间数据查询检索,可以将查询速度提升10倍。

    这个特性在PG 中的支持方法

    暂时不支持内存特性,但是空间计算、文本搜索都是很早很早以前就支持的。

    https://github.com/postgrespro/rum

    https://www.postgresql.org/docs/12/indexes-types.html

    pic

    在 Oracle 12.2 和 18c 中,已经实现了 ADG 的 会话连接保持 和 Buffer Cache保持,在 20c 中,Result Cache 在备库上进一步得以保留,以确保这个细节特性的主备性能通过。

    Result Cache 特性是指,对于特定查询(例如结果集不变化的),将查询结果保留在内存中,对于反复查询(尤其是大规模聚合)的语句,其成本几乎降低为 0 。

    参考

    《PostgreSQL Oracle 兼容性 - Oracle 19c 新特性在PostgreSQL中的使用》