流数据库 概率计算概念 - PipelineDB-Probabilistic Data Structures & Algorithms

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介:

标签

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


背景

原文:

https://mp.weixin.qq.com/s/yDSnk4BzKKu1IuhMRgL7_w

作者: 桑栎

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

官方地址:http://docs.pipelinedb.com/probabilistic.html

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

  • Bloom Filter

  • Count-Min Sketch

  • Filtered-Space Saving Top-K

  • HyperLogLog

  • T-Digest

官方地址:

http://docs.pipelinedb.com/builtin.html#pipelinedb-specific-types

http://docs.pipelinedb.com/builtin.html#pipelinedb-specific-functions

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

pic

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

Bloom Filter

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

pic

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

例子:

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

pic

插入测试数据:

pic

还有很多udf在http://docs.pipelinedb.com/aggregates.html#bloom-filter-aggregates

HyperLogLog

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

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

例子:

pic

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

        hll_count_distinct_final   

我们看看执行计划

pic

例子:

pic

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

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

https://www.pipelinedb.com/blog/pipelinedb-0-9-7-delta-streams-and-towards-a-postgresql-extension

Count-Min Sketch

在PipelineDB中,cmsketch的实现:

src/backend/pipeline/cmsketch.c

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

例子:

pic

插入测试数据:

pic

官方说明:http://docs.pipelinedb.com/aggregates.html#count-min-sketch-aggregates

Filtered-Space Saving Top-K (FSS)

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

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

http://www.l2f.inesc-id.pt/~fmmb/wiki/uploads/Work/dict.refd.pdf

有兴趣的同学可以看看。

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

例子:

pic

插入测试数据:

pic

插入6条数据

查询v_fss

pic

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

插入的6不见了

fss_topk_values输出每个value

fss_topk_freqs是每个element的个数

再插入一条:

pic

5是2条数据。

插入6

pic

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

官方说明:http://docs.pipelinedb.com/builtin.html#filtered-space-saving-functions

T-Digest

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

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

具体可以看看https://github.com/tdunning/t-digest/blob/master/docs/t-digest-paper/histo.pdf

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

例子:

pic

插入数据:

pic

0.5取的中位数2

0.6是2.3

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

http://docs.pipelinedb.com/builtin.html#t-digest-functions

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

https://github.com/sangli00/WeCharOfficialAccounts/blob/master/PipelineDB内置函数介绍.sql

目录
相关文章
|
10月前
|
SQL 存储 关系型数据库
第二篇:关系型数据库的核心概念与 SQL 基础
本篇内容深入浅出地讲解了关系型数据库的核心概念与SQL基础,适合有一定计算机基础的学习者。文章涵盖数据库的基本操作(CRUD)、数据类型、表的创建与管理等内容,并通过实例解析SELECT、INSERT、UPDATE、DELETE等语句的用法。此外,还推荐了多种学习资源与实践建议,帮助读者巩固知识。学完后,你将掌握基础数据库操作,为后续高级学习铺平道路。
642 1
|
存储 人工智能 Cloud Native
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
在9月20日2024云栖大会上,阿里云智能集团副总裁,数据库产品事业部负责人,ACM、CCF、IEEE会士(Fellow)李飞飞发表《从数据到智能:Data+AI驱动的云原生数据库》主题演讲。他表示,数据是生成式AI的核心资产,大模型时代的数据管理系统需具备多模处理和实时分析能力。阿里云瑶池将数据+AI全面融合,构建一站式多模数据管理平台,以数据驱动决策与创新,为用户提供像“搭积木”一样易用、好用、高可用的使用体验。
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
|
8月前
|
人工智能 运维 数据挖掘
瑶池数据库Data+AI驱动的全栈智能实践开放日回顾
阿里云瑶池数据库重磅推出“Data+AI能力家族”,包括DTS AI数据准备、Data Agent系列智能体及DMS MCP统一数据访问服务,重构数据与AI协同边界。通过智能化工具链,覆盖数据全生命周期,提升企业数据开发、分析、治理与运维效率,降低技术门槛,激活数据资产价值,助力企业迈向全栈智能新时代。
|
10月前
|
SQL 存储 关系型数据库
第一篇:数据库基础与概念
这篇文档面向数据库初学者,系统介绍了数据库的基础概念、类型、管理工具及实践方法。内容涵盖数据库定义、应用场景(如电商、银行系统)、数据库管理系统(DBMS)的功能与常见系统(MySQL、PostgreSQL等),以及关系型与非关系型数据库的区别。同时,文章详细解析了基本术语(表、记录、字段、主键、外键)和ER图设计,并提供了实践建议,包括创建简单数据库、学习SQL语言、使用管理工具等。最后推荐了学习资源和书籍,鼓励读者通过实际项目巩固知识,逐步掌握数据库的核心技能。
1416 11
|
9月前
|
人工智能 运维 数据挖掘
瑶池数据库开放日:全新发布Data+AI能力家族,赋能企业全栈智能实践
近日,阿里云瑶池数据库生态工具产品重磅升级,推出“Data+AI能力家族”,并举办了为期3天的全栈智能实践开放日活动。发布会上首次公开了 “Data Agent for Analytics、Data Agent for Meta、DAS Agent”等瑶池数据库Data Agent系列能力,以工具智能化 × 智能化工具的双引擎重构数据与AI的协同边界,揭秘AI时代数据价值释放的全新路径。
|
JSON Java 关系型数据库
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
在Java中,使用mybatis-plus更新实体类对象到mysql,其中一个字段对应数据库中json数据类型,更新时报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
1564 4
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
|
缓存 算法 关系型数据库
Mysql(3)—数据库相关概念及工作原理
数据库是一个以某种有组织的方式存储的数据集合。它通常包括一个或多个不同的主题领域或用途的数据表。
1034 5
Mysql(3)—数据库相关概念及工作原理