最受开发者欢迎的HTAP数据库PostgreSQL 10特性

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云原生数据库 PolarDB 分布式版,标准版 2核8GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

标签

PostgreSQL , 10 , 特性 , 开发者


背景

作为一款HTAP数据库(同时支持 "OLTP高并发在线事务处理" 与 "OLAP在线分析" 业务场景),PostgreSQL 10的哪些特性是开发人员、DBA、架构师都喜欢的呢?

多核并行增强

9.6的版本支持如下并行:

Sequential scans  
Aggregates  
Hash and loop joins  

10 并行增强:

1、通过 max_parallel_workers 控制最大并行度,  
  
可以避免分析型SQL把资源全部耗光。从而支持HTAP混合型业务。  
  
2、新增的并行索引扫描  
  
Regular index scans (btree)  
  
Index Only scans (btree)  
  
Bitmap Heap Scan  
  
Index still scanned serially  
  
3、并行的合并JOIN  
  
Merge joins  
  
4、多表扫描(append scan)支持并行排序  
  
Merge Sort  

fdw 聚合下推

FDW聚合下推,使得PostgreSQL 10可以作为一个任意数据库的sharding管理节点,用于分发路由SQL,支持where, sort, join, select-clause, agg等下推。

pic

pic

逻辑订阅

逻辑订阅有很多用途:

1、迁移、大版本升级

pic

2、数仓聚合

pic

3、拆库

pic

4、多个业务系统共享、分发数据

pic

5、多master架构

分区

内置的分区功能,不需要依赖插件。

《PostgreSQL 10 内置分区 vs pg_pathman perf profiling》

《PostgreSQL 10.0 preview 功能增强 - 内置分区表》

libpq支持failover和load balance

libpq支持配置多个连接地址,同时支持failover和负载均衡。

《PostgreSQL 10.0 preview 功能增强 - libpq支持多主机连接(failover,LB)让数据库HA和应用配合更紧密》

事务状态可查询

用户可以根据事务号,查询事务的状态。实现业务层的控制,包括闪回等功能。

《PostgreSQL flashback(闪回) 功能实现与介绍》

《PostgreSQL 10.0 preview 功能增强 - 更强可靠性, 过去式事务状态可查(杜绝unknown事务)》

任意多副本同步 - 金融级可靠性

用户可以根据事务的重要性,选择需要落几个副本(WAL),从而实现多副本持久化。

《PG多节点(quorum based), 0丢失 HA(failover,switchover)方案》

自定义多列混合统计信息

《PostgreSQL 10 黑科技 - 自定义统计信息》

统计信息可以用于评估SQL的执行成本、查看数据分布、估算唯一值、估算记录数、查看数据存储的相关性 等。默认情况下,数据库的柱状图是单列的,当输入多列条件时,使用多列统计信息,可以估算更加精确的成本。实现更精准的执行计划。

hash index增强(持久化、性能)

PostgreSQL 10 hash index支持持久化(写WAL),同时在vacuum, 查询性能等方面都有巨大的优化。如果是等值查询,或者超长列,使用hash index可以获得比btree更好的性能。

重命名枚举值

是的,枚举值可以rename了。

JSON,JSONB全文检索

JSON, JSONB类型,支持全文检索。

The functions ts_headline() and to_tsvector() can now be used on these data types.

file_fdw支持命令行返回值作为源

file_fdw是一个文件外部表接口,用于将文件作为外部表数据源来使用,现在,file_fdw支持command的输出结果作为外部表的输入源了。

CREATE FOREIGN TABLE  
test(a int, b text)  
SERVER csv  
OPTIONS (program 'gunzip -c /tmp/data.csv.gz');  

不依赖OS层的通用全球化支持 - ICU库

编译时,使用ICU

--with-icu
Build with support for the ICU library.
This requires the ICU4C package to be installed.
The minimum required version of ICU4C is currently 4.2.

By default, pkg-config will be used to find the required compilation options.
This is supported for ICU4C version 4.6 and later.
For older versions, or if pkg-config is not available,
the variables ICU_CFLAGS and ICU_LIBS can be specified to configure, like in this example:

./configure ... --with-icu ICU_CFLAGS='-I/some/where/include' ICU_LIBS='-L/some/where/lib -licui18n -licuuc -licudata'

(If ICU4C is in the default search path for the compiler,
then you still need to specify a nonempty string in order to avoid use of pkg-config,
for example, ICU_CFLAGS=' '.)

例子

SELECT * FROM t ORDER BY a COLLATE "sv-SE-x-icu";  
valle  
vera  
walle  
wera  
  
SELECT * FROM t ORDER BY a COLLATE "sv-SE-u-co-standard-x-icu";  
valle  
walle  
vera  
wera  

scram-sha-256 安全认证

《PostgreSQL 10.0 preview 安全增强 - SASL认证方法 之 scram-sha-256 安全认证机制》

监控角色

新增了一些内置的监控角色,不需要使用SUPERUSER,只要给了这些角色,就可以获得读一些系统表的权限,或者获得杀会话的权限。

便于管理,提高了安全性。

postgres=# select * from pg_roles ;  
       rolname        | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolconnlimit | rolpassword | rolvaliduntil | rolbypassrls | rolconfig |  oid    
----------------------+----------+------------+---------------+-------------+-------------+----------------+--------------+-------------+---------------+--------------+-----------+-------  
 pg_signal_backend    | f        | t          | f             | f           | f           | f              |           -1 | ********    |               | f            |           |  4200  
 pg_read_all_stats    | f        | t          | f             | f           | f           | f              |           -1 | ********    |               | f            |           |  3375  
 pg_monitor           | f        | t          | f             | f           | f           | f              |           -1 | ********    |               | f            |           |  3373  
 pg_read_all_settings | f        | t          | f             | f           | f           | f              |           -1 | ********    |               | f            |           |  3374  
 pg_stat_scan_tables  | f        | t          | f             | f           | f           | f              |           -1 | ********    |               | f            |           |  3377  

动态视图增强 - 添加系统进程的状态监控

postgres=# select pid,backend_type,wait_event_type,wait_event from pg_stat_activity ;  
  pid  |    backend_type     | wait_event_type |     wait_event        
-------+---------------------+-----------------+---------------------  
  2077 | background worker   | Activity        | LogicalLauncherMain  
  2074 | autovacuum launcher | Activity        | AutoVacuumMain  
 15397 | client backend      |                 |   
  2072 | background writer   | Activity        | BgWriterMain  
  2071 | checkpointer        | Activity        | CheckpointerMain  
  2073 | walwriter           | Activity        | WalWriterMain  
(6 rows)  

等待事件

https://www.postgresql.org/docs/10/static/monitoring-stats.html#monitoring-stats-views

新增了一些等待事件。

Latches  
Extensions  
Client/socket  
Timeout  
...  
  
I/O events  
Reads  
Writes  
Individually identified  

IDENTITY列

实际上就是自增列,兼容SQL Server。PG原有的serial, default sequence都可以实现类似的功能。

《PostgreSQL 10 新特性 - identity column (serial, 自增)》

XMLTABLE

https://www.postgresql.org/docs/current/static/functions-xml.html#functions-xml-processing-xmltable

xml的支持更加强大了。xmltable可以将XML解析为一张表输出。

CREATE TABLE xmldata AS SELECT  
xml $$  
<ROWS>  
  <ROW id="1">  
    <COUNTRY_ID>AU</COUNTRY_ID>  
    <COUNTRY_NAME>Australia</COUNTRY_NAME>  
  </ROW>  
  <ROW id="5">  
    <COUNTRY_ID>JP</COUNTRY_ID>  
    <COUNTRY_NAME>Japan</COUNTRY_NAME>  
    <PREMIER_NAME>Shinzo Abe</PREMIER_NAME>  
    <SIZE unit="sq_mi">145935</SIZE>  
  </ROW>  
  <ROW id="6">  
    <COUNTRY_ID>SG</COUNTRY_ID>  
    <COUNTRY_NAME>Singapore</COUNTRY_NAME>  
    <SIZE unit="sq_km">697</SIZE>  
  </ROW>  
</ROWS>  
$$ AS data;  
  
SELECT xmltable.*  
  FROM xmldata,  
       XMLTABLE('//ROWS/ROW'  
                PASSING data  
                COLUMNS id int PATH '@id',  
                        ordinality FOR ORDINALITY,  
                        "COUNTRY_NAME" text,  
                        country_id text PATH 'COUNTRY_ID',  
                        size_sq_km float PATH 'SIZE[@unit = "sq_km"]',  
                        size_other text PATH  
                             'concat(SIZE[@unit!="sq_km"], " ", SIZE[@unit!="sq_km"]/@unit)',  
                        premier_name text PATH 'PREMIER_NAME' DEFAULT 'not specified') ;  
  
 id | ordinality | COUNTRY_NAME | country_id | size_sq_km |  size_other  | premier_name    
----+------------+--------------+------------+------------+--------------+---------------  
  1 |          1 | Australia    | AU         |            |              | not specified  
  5 |          2 | Japan        | JP         |            | 145935 sq_mi | Shinzo Abe  
  6 |          3 | Singapore    | SG         |        697 |              | not specified  

流式物理备库支持snapshot

备库支持快照,意味着可以在备库创建一致性的并行任务,比如pg_dump在备库可以支持并行备份。

排序性能优化

语句级触发器支持transition tables

支持transition tables,在AFTER语句级触发器中,通过这个transition tables,可以得到语句中触及的所有行。

方便批处理,提高性能。

 AFTER trigger transition tables  

《PostgreSQL 10.0 preview 功能增强 - 触发器函数内置中间表》

参考

1、PostgreSQL 特性全矩阵

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

2、PostgreSQL 特性矩阵

http://www.cybertec.at/best-of-postgresql-10-for-the-developer/

3、《PostgreSQL 10 解读》

4、Major Features: Postgres 10

5、A look at the Elephants Trunk - PostgreSQL 10

6、PostgreSQL 10 New Features With Examples

7、https://www.postgresql.org/about/press/presskit10/

8、https://wiki.postgresql.org/wiki/New_in_postgres_10

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
21天前
|
Cloud Native OLAP OLTP
在业务处理分析一体化的背景下,开发者如何平衡OLTP和OLAP数据库的技术需求与选型?
在业务处理分析一体化的背景下,开发者如何平衡OLTP和OLAP数据库的技术需求与选型?
122 4
|
2月前
|
关系型数据库 分布式数据库 数据库
阿里云PolarDB登顶2024中国数据库流行榜:技术实力与开发者影响力
近日,阿里云旗下的自研云原生数据库PolarDB在2024年中国数据库流行度排行榜中夺冠,并刷新了榜单总分纪录,这一成就引起了技术圈的广泛关注。这一成就源于PolarDB在数据库技术上的突破与创新,以及对开发者和用户的实际需求的深入了解体会。那么本文就来分享一下关于数据库流行度排行榜的影响力以及对数据库选型的影响,讨论PolarDB登顶的关键因素,以及PolarDB“三层分离”新版本对开发者使用数据库的影响。
74 3
阿里云PolarDB登顶2024中国数据库流行榜:技术实力与开发者影响力
|
2月前
|
关系型数据库 分布式数据库 数据库
阿里云瑶池数据库训练营权益:PolarDB开发者大会主题资料开放下载!
阿里云瑶池数据库训练营权益:PolarDB开发者大会主题资料开放下载!
|
1月前
|
关系型数据库 分布式数据库 数据库
PolarDB PostgreSQL版:Oracle兼容的高性能数据库
PolarDB PostgreSQL版是一款高性能的数据库,具有与Oracle兼容的特性。它采用了分布式架构,可以轻松处理大量的数据,同时还支持多种数据类型和函数,具有高可用性和可扩展性。它还提供了丰富的管理工具和性能优化功能,为企业提供了可靠的数据存储和处理解决方案。PolarDB PostgreSQL版在数据库领域具有很高的竞争力,可以满足各种企业的需求。
|
3月前
|
关系型数据库 MySQL 分布式数据库
开发者关注的数据库技术与创新
【1月更文挑战第4天】开发者关注的数据库技术与创新
|
3月前
|
人工智能 Serverless 数据库
在云时代下,开发者需要什么样的数据库?
近两年技术圈的蓬勃发展,大家有目共睹,尤其是在云计算、大数据和人工智能等技术的快速发展下,数据库技术也正经历和面临着一次划时代的转变。大家都知道,随着Serverless架构的崛起和人工智能的应用,数据库开发者需要面对的需求和挑战也日益增多,实际开发中的问题也是层出不穷、日新月异。作为开发者,尤其是在日常开发中结合云原生,需要使用什么样的数据库才算符合我们的开发需求呢?那么本文就来简单讨论一下在云时代下,开发者需要什么样的数据库,讨论DBA(数据库管理员)的工作是否会被人工智能取代,以及探寻当前最需要的数据库类型。通过深入了解这些话题,我们可以更好地应对数据库技术的发展和变革。
45 1
在云时代下,开发者需要什么样的数据库?
|
3月前
|
分布式数据库 数据库 数据安全/隐私保护
开发者关注的数据库技术与创新,未来数据库的演进及理想数据库的构想
作为开发者,想必大家都知道在技术圈中数据库相关领域是技术开发中的重中之重,数据库技术与创新不断推动着数字化时代的发展,数据库技术正在经历着一次创新的浪潮,还有就是数据库技术的不断创新为开发者们在日常实际开发中提供了更多的可能性和好的机遇。那么本文就来简单聊聊最值得开发者关注的数据库技术与创新,包括分布式数据库、图数据库、时序数据库、区块链数据库以及AI与数据库的结合等方面,以及探讨未来数据库的演进趋势,并讨论一下在开发者心目中最理想的数据库的特征与构想。
53 3
|
1月前
|
存储 关系型数据库 MySQL
TiDB与MySQL、PostgreSQL等数据库的比较分析
【2月更文挑战第25天】本文将对TiDB、MySQL和PostgreSQL等数据库进行详细的比较分析,探讨它们各自的优势和劣势。TiDB作为一款分布式关系型数据库,在扩展性、并发性能等方面表现突出;MySQL以其易用性和成熟性受到广泛应用;PostgreSQL则在数据完整性、扩展性等方面具有优势。通过对比这些数据库的特点和适用场景,帮助企业更好地选择适合自己业务需求的数据库系统。
|
1月前
|
关系型数据库 MySQL 测试技术
数据库专家带你体验PolarDB MySQL版 Serverless的极致弹性特性!
本次基于阿里云瑶池数据库解决方案体验馆,带你体验PolarDB MySQL Serverless形态下的性能压测环境,基于可选择的标准压测工具进行压测,构造弹性场景进行压测,实时动态展示弹性能力、价格和性价比结果,压测环境可开放定制修改、可重复验证。参与活动即有机会获得鼠标、小米打印机、卫衣等精美礼品。
数据库专家带你体验PolarDB MySQL版 Serverless的极致弹性特性!
|
2月前
|
关系型数据库 MySQL 测试技术
数据库专家带你体验PolarDB MySQL版 Serverless的极致弹性特性
本次基于阿里云瑶池数据库解决方案体验馆,带你体验PolarDB MySQL Serverless形态下的性能压测环境,基于可选择的标准压测工具进行压测,构造弹性场景进行压测,实时动态展示弹性能力、价格和性价比结果,压测环境可开放定制修改、可重复验证。参与活动即有机会获得鼠标、小米打印机、卫衣等精美礼品。

相关产品

  • 云原生数据库 PolarDB