博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
流数据库 概率计算概念 - PipelineDB-Probabilistic Data Structures & Algorithms
阅读量:6829 次
发布时间:2019-06-26

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

标签

PostgreSQL , PPAS , enterprisedb , spin , 锁等待优化


背景

原文:

作者: 桑栎

PipelineDB在物理存储的时候,使用了大量的聚合数据类型,在处理持续数据的时候,这些类型起到很重要的左右,我们来了解一下PipelineDB是如何使用这些数据类型的。

官方地址:

PipelineDB目前提供的数据类型为:

  • Bloom Filter

  • Count-Min Sketch

  • Filtered-Space Saving Top-K

  • HyperLogLog

  • T-Digest

官方地址:

对应的数据类型和function。这些数据类型,如果你不想在CV中使用,其实也可以在普通表内使用。

具体的代码实现在:src/backend/utils/adt/

Bloom Filter

在PipelineDB中,Bloom的实现:src/backend/pipeline/bloom.c

Bloom这个类型几乎使用的太频繁了,PipelineDB内置这个数据类型,我们在CV中可以很好是用bloom来存储数据

例子:

在创建CV的时候,字段直接能用内置的UDF来生成bloom的类型

插入测试数据:

还有很多udf在

HyperLogLog

在PipelineDB中,HLL的实现:src/backend/pipeline/hll.c

在大部分的实际运用中,HLL是用来解决count(distinct)问题的。在pp中,也是用来存储这种数据的。

例子:

创建的v_hll,对应的字段count(distinct)物理存储格式就是HLL.而在查询过程中,parse会把这个字段解析成一个函数:

hll_count_distinct_final

我们看看执行计划

例子:

我不管插入几次,结果就是count(distinct)

在0.9.7之前,这个效率其实很一般,scan会特别消耗性能,在0.9.7对该功能进行了提升

Count-Min Sketch

在PipelineDB中,cmsketch的实现:

src/backend/pipeline/cmsketch.c

cmsketch主要是解决大流量中元素出现的频率,跟bloom filter其实还蛮类似,不过bloom是记录存在与否。使用cmsketch是有误差的。

例子:

插入测试数据:

官方说明:

Filtered-Space Saving Top-K (FSS)

PipelineDB中FSS的具体实现:src/backend/pipeline/fss.c

FSS在具体的使用是计算Top-K,官方的具体实现是根据论文:

有兴趣的同学可以看看。

在实际环境中,例如计算最近5分钟的top-10,并且非常的节省空间和内存,我们来看看pp是如何使用的。

例子:

插入测试数据:

插入6条数据

查询v_fss

通过fss_topk只查询出5条,每个都显示value为1

插入的6不见了

fss_topk_values输出每个value

fss_topk_freqs是每个element的个数

再插入一条:

5是2条数据。

插入6

6出现了,并且替换掉了4.

官方说明:

T-Digest

PipelineDB中tdigest的实现:src/backend/pipeline/tdigest.c

tdigest主要是根据百分位数和中位数来进行估计计算。感觉跟数据库中内置函数percentile_cont有点像。这个功能没怎么用过

具体可以看看

我简单的介绍一下如何在PipelineDB中的使用吧。

例子:

插入数据:

0.5取的中位数2

0.6是2.3

大概就是这样的情况,官方说明:

over,差不多介绍了个简单的使用吧,里面的SQL如果想实验可以来github拿一下

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

你可能感兴趣的文章
libvirt虚拟系统如何增加usb设备
查看>>
API 接口防刷
查看>>
Corrupted MAC on input
查看>>
vCenter Server 返回 503 服务不可用错误
查看>>
迭代器,生成器
查看>>
如何用二分法在有序数组中找到你想要的数字
查看>>
单向ospf
查看>>
深蓝串口调试工具2017冬季版(2.14.11)
查看>>
linux ssh_config和sshd_config配置文件
查看>>
Oracle教程之管理索引(六)--Oracle重建索引
查看>>
ubuntu编译最简环境
查看>>
回顾一个考务系统的开发
查看>>
何为云计算
查看>>
IN(传递参数)加字段原始值实现方法
查看>>
vmware下centos拓展空间
查看>>
nginx安装手册
查看>>
Linux-shell-完全详解
查看>>
SCCM 2012 R2 从入门到精通 Part11 系统推送(2)
查看>>
唯有将工作变成事业,才能发自内心去热爱
查看>>
JUST GO
查看>>