博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【postgresql】数据聚合之PERCENTILE_CONT
阅读量:1990 次
发布时间:2019-04-27

本文共 1204 字,大约阅读时间需要 4 分钟。

在实现性能测试报告聚合的时候,一开始使用的方案是通过数据库查询load出所有数据,然后不同维度数据不同消费者消费聚合对应的数据,这样实现当数据量超过1000w+时下载速度无法解决

因为使用的数据库是TimescaleDB,可以使用数据库直接聚合数据的方式

Aggregate Functions

PostgreSQL提供了一系列的

其中我们可以找到有序集合聚合函数
在这里插入图片描述

PERCENTILE_CONT

ERCENTILE_CONT 在对值进行排序后计算值之间的线性内插

PERCENTILE_CONT

是一种假定连续分布模型的逆分布函数。该函数具有一个百分比值和一个排序规范,并返回一个在有关排序规范的给定百分比值范围内的内插值

语法

PERCENTILE_CONT ( percentile )WITHIN GROUP (ORDER BY expr)OVER (  [ PARTITION BY expr_list ]  )

实际栗子

表名:report_sample

描述:获取执行性能报告数据
主要字段:task_id, seconds, elapsed
字段情况:该表10个字段
数据量:1000w+
聚合数据量:30w+

使用聚合的方式

SELECT labels as transaction,       min(elapsed) as elapsed_min,       avg(elapsed) as elapsed_avg,       percentile_cont(0.5) WITHIN GROUP (ORDER BY elapsed) as elapsed_50pc,       percentile_cont(0.9) WITHIN GROUP (ORDER BY elapsed) as elapsed_90pc,       percentile_cont(0.95) WITHIN GROUP (ORDER BY elapsed) as elapsed_95pc,       percentile_cont(0.99) WITHIN GROUP (ORDER BY elapsed) as elapsed_99pc,FROM report_sampleWHERE task_id = '45eff63a74944f6eb9bef93d8cf04f13'group by labels;

执行3次分别所需时间 495ms、408ms、406ms

直接拉取该30w数据

select	 * from 	report_sample where  	task_id = '45eff63a74944f6eb9bef93d8cf04f13';

执行3次分别所需时间 18140ms、17657ms、17876ms

很明显,直接使用数据库聚合的效率和性能远高于从数据库拉取后消费数据

转载地址:http://hptvf.baihongyu.com/

你可能感兴趣的文章
【转载】将Ubuntu16.04 中gedit在仅显示一个文件时显示文件名tab
查看>>
调试 LenaCV 3D Camera (Linux)
查看>>
OpenCV杂记 - Mat in C++
查看>>
location区段
查看>>
nginx访问控制、基于用户认证、https配置
查看>>
SaltStack
查看>>
linux内存的寻址方式
查看>>
how2heap-double free
查看>>
how2heap-fastbin_dup_consolidate
查看>>
orw_shellcode_模板
查看>>
fmt在bss段(neepusec_easy_format)
查看>>
python 函数式编程
查看>>
redis cli
查看>>
tensorflow 数据格式
查看>>
tf keras SimpleRNN源码解析
查看>>
tf keras Dense源码解析
查看>>
tf rnn输入输出的维度和权重的维度
查看>>
检验是否服从同一分布
查看>>
keras、tf、numpy实现logloss对比
查看>>
MyBatisPlus简单入门(SpringBoot)
查看>>