开发者社区> 德哥> 正文

HTAP数据库 PostgreSQL 场景与性能测试之 46 - (OLTP) 大json字段的高并发更新

简介:
+关注继续查看

标签

PostgreSQL , HTAP , OLTP , OLAP , 场景与性能测试


背景

PostgreSQL是一个历史悠久的数据库,历史可以追溯到1973年,最早由2014计算机图灵奖得主,关系数据库的鼻祖Michael_Stonebraker 操刀设计,PostgreSQL具备与Oracle类似的功能、性能、架构以及稳定性。

pic

PostgreSQL社区的贡献者众多,来自全球各个行业,历经数年,PostgreSQL 每年发布一个大版本,以持久的生命力和稳定性著称。

2017年10月,PostgreSQL 推出10 版本,携带诸多惊天特性,目标是胜任OLAP和OLTP的HTAP混合场景的需求:

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

1、多核并行增强

2、fdw 聚合下推

3、逻辑订阅

4、分区

5、金融级多副本

6、json、jsonb全文检索

7、还有插件化形式存在的特性,如 向量计算、JIT、SQL图计算、SQL流计算、分布式并行计算、时序处理、基因测序、化学分析、图像分析 等。

pic

在各种应用场景中都可以看到PostgreSQL的应用:

pic

PostgreSQL近年来的发展非常迅猛,从知名数据库评测网站dbranking的数据库评分趋势,可以看到PostgreSQL向上发展的趋势:

pic

从每年PostgreSQL中国召开的社区会议,也能看到同样的趋势,参与的公司越来越多,分享的公司越来越多,分享的主题越来越丰富,横跨了 传统企业、互联网、医疗、金融、国企、物流、电商、社交、车联网、共享XX、云、游戏、公共交通、航空、铁路、军工、培训、咨询服务等 行业。

接下来的一系列文章,将给大家介绍PostgreSQL的各种应用场景以及对应的性能指标。

环境

环境部署方法参考:

《PostgreSQL 10 + PostGIS + Sharding(pg_pathman) + MySQL(fdw外部表) on ECS 部署指南(适合新用户)》

阿里云 ECS:56核,224G,1.5TB*2 SSD云盘

操作系统:CentOS 7.4 x64

数据库版本:PostgreSQL 10

PS:ECS的CPU和IO性能相比物理机会打一定的折扣,可以按下降1倍性能来估算。跑物理主机可以按这里测试的性能乘以2来估算。

场景 - 数据量与性能的线性关系(10亿+无衰减), 暨单表多大需要分区 (OLTP)

1、背景

很多时候用户可能使用PG的NOSQL特性,简化开发工作量,例如JSON类型,有些业务不仅仅需要存JSON,可能还需要对JSON内的字段进行修改。

这个测试回答用户几个问题:

1、JSON字段支持多大,回答,变长字段,最大支持压缩后存储1GB。内置PGLZ压缩算法。

2、高并发更新大JSON字段时,性能如何。

2、设计

单表记录数:千万

单个JSON:约2KB

3、准备测试表

postgres=# create table test(id int primary key, info jsonb);  
CREATE TABLE  

4、准备测试函数(可选)

用于生成任意长度(任意个KEY)的JSON。

create or replace function gen_json(int) returns jsonb as $$  
  select jsonb_agg(row_to_json(t)) from (select 'id'||id c1, md5(random()::text) c2 from generate_series(1,$1) t(id))t;   
$$ language sql strict;  
CREATE FUNCTION  

示例

postgres=# select gen_json(2);  
                                                      gen_json                                                        
--------------------------------------------------------------------------------------------------------------------  
 [{"c1": "id1", "c2": "02757c642789b76abf3f3551080c0a13"}, {"c1": "id2", "c2": "89bef7a80e378606897c2fd9e91bd889"}]  
(1 row)  

5、准备测试数据

写入1000万条测试数据,每个JSON字段约2KB

postgres=# insert into test select generate_series(1,10000000), gen_json(40);  
INSERT 0 10000000  
  
postgres=# select pg_column_size(info) from test limit 1;  
 pg_column_size   
----------------  
           1617  
(1 row)  

6、准备测试脚本

1、更新JSON内容测试(由于PG为多版本,所以直接使用下面的方法,测试效果和更新是一样的)

vi test.sql  
  
\set id random(1,10000000)  
update test set info=info where id=:id;   

7、测试

测试脚本

CONNECTS=32       
TIMES=120        
export PGHOST=$PGDATA        
export PGPORT=1921        
export PGUSER=postgres        
export PGPASSWORD=postgres        
export PGDATABASE=postgres        
        
pgbench -M prepared -n -r -P 5 -f ./test.sql -c $CONNECTS -j $CONNECTS -T $TIMES        

8、测试结果

1、查询测试TPS

pgbench -M prepared -n -r -P 1 -f ./test.sql -c 32 -j 32 -T 120  
  
transaction type: ./test.sql  
scaling factor: 1  
query mode: prepared  
number of clients: 32  
number of threads: 32  
duration: 120 s  
number of transactions actually processed: 12076455  
latency average = 0.318 ms  
latency stddev = 1.394 ms  
tps = 100617.926372 (including connections establishing)  
tps = 100624.454244 (excluding connections establishing)  
script statistics:  
 - statement latencies in milliseconds:  
         0.005  \set id random(1,10000000)  
         0.313  update test set info=info where id=:id;   

性能小结

数据量 更新JSON TPS
1000万 10万

参考

《PostgreSQL、Greenplum 应用案例宝典《如来神掌》 - 目录》

《数据库选型之 - 大象十八摸 - 致 架构师、开发者》

《PostgreSQL 使用 pgbench 测试 sysbench 相关case》

《数据库界的华山论剑 tpc.org》

https://www.postgresql.org/docs/10/static/pgbench.html

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
性能优化技巧 - 组表数据更新
组表是集算器提供的高性能存储格式,其原理在于将数据事先排序并以压缩方式紧致存储,好处是占用空间更小,可利用有序进行快速定位。 但这种存储方式在数据更新时会遇到麻烦,这是因为新数据也要和历史数据一起排序并压缩,常常会要求重写整个组表,重写操作非常耗时,但又不得不做。
708 0
阿里云 RDS PostgreSQL 高并发特性 vs 社区版本 (1.6万并发: 3倍吞吐,240倍响应速度)
标签 PostgreSQL , 阿里云 , 高并发 , 内置pool , Oracle shared server 背景 进程模型数据库,需要为每个会话指派独立的进程与之服务,在连接数非常多,且大都是活跃连接时,进程调度浪费或引入的开销甚至远远大于实际任务需要的开销(例如上下文切换,MEMCPY等),性能下降会较为严重。
6338 0
SQL更新部分字段或者插入新数据
SQL更新部分字段或者插入新数据 因为业务的原因,一张表的数据需要整合两张外键关联不强的表数据,这里涉及到更新部分字段或者插入新数据。今天简单的做个笔记,后续有需要再补充完整 测试表结构: CREATE TABLE `test` ( `id` int(10) NOT NULL, `name` v.
1450 0
MaxCompute数据仓库在更新插入、直接加载、全量历史表三大算法中的数据转换实践
2018“MaxCompute开发者交流”钉钉群直播分享,由阿里云数据技术专家彬甫带来以“MaxCompute数据仓库数据转换实践”为题的演讲。本文首先介绍了MaxCompute的数据架构和流程,其次介绍了ETL算法中的三大算法,即更新插入算法、直接加载算法、全量历史表算法,再次介绍了在OLTP系统中怎样处理NULL值,最后对ETL相关知识进行了详细地介绍。
4849 0
Java多线程高并发学习笔记(二)——深入理解ReentrantLock与Condition
锁的概念 从jdk发行1.5版本之后,在原来synchronize的基础上,增加了重入锁ReentrantLock。 本文就不介绍synchronize了,有兴趣的同学可以去了解一下,本文重点介绍ReentrantLock。
1110 0
+关注
德哥
公益是一辈子的事, I'm digoal, just do it.
2153
文章
245
问答
来源圈子
更多
阿里云数据库:帮用户承担一切数据库风险,给您何止是安心!支持关系型数据库:MySQL、SQL Server、PostgreSQL、PPAS(完美兼容Oracle)、自研PB级数据存储的分布式数据库Petadata、自研金融级云数据库OceanBase支持NoSQL数据库:MongoDB、Redis、Memcache更有褚霸、丁奇、德哥、彭立勋、玄惭、叶翔等顶尖数据库专家服务。
+ 订阅
相关文档: 云数据库 OceanBase 版 可信账本数据库 云原生关系型数据库 PolarDB PostgreSQL引擎
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载