HTAP数据库 PostgreSQL 场景与性能测试之 33 - (OLAP) 物联网 - 线性字段区间实时统计

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介:

标签

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来估算。

场景 - 物联网 - 线性字段区间实时统计 (OLAP)

1、背景

在物联网、互联网、业务系统中都有时序数据,随着时间推移产生的数据。在时间维度或序列字段上呈现自增特性。

区间查询与统计分析的需求非常多。

PostgreSQL针对时序类型的数据,除了有传统的b-tree索引,还有一种块级索引BRIN,非常适合这种相关性很好的时序数据。这种索引在Oracle Exadata一体机上也有。而使用PostgreSQL可以免费享用这种高端特性。

在第15个场景中,设计了一个区间查询输出明细的场景,输出吞吐达到了 3160万 行/s。

《HTAP数据库 PostgreSQL 场景与性能测试之 15 - (OLTP) 物联网 - 查询一个时序区间的数据》

本文的场景与之类似,只不过换成聚合并输出。

2、设计

1万个传感器,10亿条时序自增记录,输入任意传感器,查询并输出任意区间5000条记录的聚合值。

3、准备测试表

create table t_sensor(  
  id serial,  
  val int,  
  ts timestamp default clock_timestamp()  
);  
do language plpgsql $$  
declare  
begin  
  for i in 1..10000 loop  
    execute format ('create table t_sensor%s (id serial, val int, ts timestamp default clock_timestamp()) inherits(t_sensor)', i);  
    execute format ('create index idx_t_sensor%s on t_sensor%s using brin(id)', i, i);  
  end loop;  
end;  
$$;  

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

1、批量写入传感器数据的函数

create or replace function ins_sensor(int, int) returns void as $$  
declare  
begin  
  execute format('insert into t_sensor%s (val) select random()*1000 from generate_series(1,%s)', $1, $2);  
end;  
$$ language plpgsql;  

2、统计函数

create or replace function stats_sensor(int, int) returns float8 as $$  
declare  
  res float8;  
begin  
  execute format('select avg(val) from t_sensor%s where id>=%s and id<=%s', $1, $2, $2+5000) into res;  
  return res;  
end;  
$$ language plpgsql strict;  

5、准备测试数据

准备10亿条测试记录。

vi test.sql  
  
\set sid random(1,10000)  
select ins_sensor(:sid, 1000);  
pgbench -M prepared -n -r -P 1 -f ./test.sql -c 50 -j 50 -t 20000  

6、准备测试脚本

vi test.sql  
  
\set sid random(1,10000)  
\set range random(1,100000)  
select stats_sensor(:sid, :range);  

压测

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

7、测试

transaction type: ./test.sql  
scaling factor: 1  
query mode: prepared  
number of clients: 56  
number of threads: 56  
duration: 300 s  
number of transactions actually processed: 1881394  
latency average = 8.929 ms  
latency stddev = 4.260 ms  
tps = 6266.195309 (including connections establishing)  
tps = 6266.920752 (excluding connections establishing)  
script statistics:  
 - statement latencies in milliseconds:  
         0.002  \set sid random(1,10000)  
         0.001  \set range random(1,100000)  
         8.930  select stats_sensor(:sid, :range);  

TPS: 6266

10亿记录,1万个传感器,任意滑动范围内取5000条,进行统计,输出统计值。

平均响应时间: 8.9 毫秒

10亿记录,1万个传感器,任意滑动范围内取5000条,进行统计,输出统计值。

参考

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

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

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

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

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

相关实践学习
AnalyticDB MySQL海量数据秒级分析体验
快速上手AnalyticDB MySQL,玩转SQL开发等功能!本教程介绍如何在AnalyticDB MySQL中,一键加载内置数据集,并基于自动生成的查询脚本,运行复杂查询语句,秒级生成查询结果。
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
目录
相关文章
|
19天前
|
缓存 数据库 数据安全/隐私保护
Discuz! X 数据库字典详解:DZ各数据表作用及字段含义
我们使用DISCUZ做网站时,有时需要对数据表进行操作,在操作数据表之前,需要对数据表进行了解。下面是DISCUZ 数据库各数据表作用及字段含义详解,方便新手更好的了解DISCUZ数据库。
42 4
|
1月前
|
传感器 物联网 区块链
新技术趋势与应用:探讨新兴技术如区块链、物联网、虚拟现实等的发展趋势和应用场景
【10月更文挑战第7天】随着科技的飞速发展,新兴技术如区块链、物联网、虚拟现实等正在逐渐改变我们的生活。本文将对这些新兴技术的发展趋势和应用场景进行探讨,并结合代码示例,帮助读者更好地理解这些技术的应用价值和未来发展方向。
|
9天前
|
供应链 物联网 区块链
新技术趋势与应用:探讨新兴技术如区块链、物联网、虚拟现实等的发展趋势和应用场景
【10月更文挑战第29天】随着科技的飞速发展,新兴技术如区块链、物联网、虚拟现实等正逐渐改变我们的生活。本文将对这些技术的发展趋势和应用场景进行深入探讨,以期为读者提供一个全新的视角来理解这些技术的价值和应用前景。
33 0
|
10天前
|
供应链 物联网 区块链
新技术趋势与应用:探讨新兴技术如区块链、物联网、虚拟现实等的发展趋势和应用场景
【10月更文挑战第28天】随着科技的不断进步,新兴技术如区块链、物联网、虚拟现实等正在逐步改变我们的生活。本文将对这些技术的发展趋势和应用场景进行深入探讨,并结合代码示例,帮助读者更好地理解这些技术的应用价值。
|
1月前
|
传感器 物联网 新制造
新技术趋势与应用:探讨新兴技术如区块链、物联网、虚拟现实等的发展趋势和应用场景
【10月更文挑战第3天】随着科技的不断进步,新兴技术如区块链、物联网、虚拟现实等正在逐渐改变我们的生活。本文将探讨这些技术的发展趋势和应用场景,并分析它们如何影响我们的未来。
24 2
|
1月前
|
机器学习/深度学习 物联网 区块链
新技术趋势与应用:探讨新兴技术如区块链、物联网、虚拟现实等的发展趋势和应用场景
【9月更文挑战第31天】随着科技的飞速发展,新兴技术如区块链、物联网、虚拟现实等正在逐渐改变我们的生活。本文将对这些技术的发展趋势和应用场景进行探讨,以期为读者提供更深入的了解。
|
2月前
|
供应链 物联网 区块链
新技术趋势与应用:探讨新兴技术如区块链、物联网、虚拟现实等的发展趋势和应用场景
【9月更文挑战第29天】随着科技的不断进步,新兴技术如区块链、物联网、虚拟现实等正在逐渐改变我们的生活。本文将对这些技术的发展趋势和应用场景进行探讨,并给出相应的代码示例。通过本文的学习,你将了解到这些新技术的原理和应用,以及如何在实际项目中使用它们。让我们一起探索这个充满无限可能的科技世界吧!
|
2月前
|
供应链 监控 物联网
新技术趋势与应用:探讨新兴技术如区块链、物联网、虚拟现实等的发展趋势和应用场景##
本文将深入探讨区块链、物联网和虚拟现实等新兴技术的发展趋势及其广泛的应用场景。我们将从这些技术的基本原理开始,逐步揭示它们在未来可能带来的变革与挑战。通过案例分析和前瞻性研究,本文旨在为读者提供清晰、准确且具有启发性的信息。 ##
|
2月前
|
物联网 区块链 vr&ar
新技术趋势与应用:探讨新兴技术如区块链、物联网、虚拟现实等的发展趋势和应用场景
【9月更文挑战第28天】本文将探讨新兴技术如区块链、物联网、虚拟现实等的发展趋势和应用场景。我们将分析这些技术的基本原理,以及它们如何改变我们的生活和工作方式。我们还将讨论这些技术面临的挑战,并提出一些解决方案。最后,我们将展望这些技术的未来发展前景。
|
2月前
|
JSON 数据库 数据格式
数据库表如果有json字段,该怎么更新
数据库表如果有json字段,该怎么更新

相关产品

  • 云原生数据库 PolarDB
  • 云数据库 RDS PostgreSQL 版