PostgreSQL (varbit, roaring bitmap) VS pilosa(bitmap库)

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云原生数据库 PolarDB 分布式版,标准版 2核8GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

标签

PostgreSQL , varbit , varbitx , roaring bitmap , pilosa , bitmap , 12306 , 实时画像 , 门禁广告售票系统


背景

Pilosa is an open source, distributed bitmap index that dramatically accelerates queries across multiple, massive data sets.

Pilosa abstracts the index from data storage and optimizes it for massive scale.

pilosa 是什么

https://www.pilosa.com/about/

pilosa 是一群开发人员为了解决一些科学计算相关的场景而设计的一个in memory bitmap数据管理软件,可以加速一些特定的查询。例如(哪个属性是热门属性,某个属性包含了哪些对象,哪些属性通常会集体出现。)。

pilosa通常用在数据分析和统计领域,例如前面提到的根据属性组合求结果集,与阿里云RDS PostgreSQL varbitx提供的功能非常类似。

阿里云RDS PostgreSQL varbitx已用于多个业务场景:

《阿里云RDS for PostgreSQL varbitx插件与实时画像应用场景介绍》

《基于阿里云 RDS PostgreSQL 打造实时用户画像推荐系统》

《阿里云RDS for PostgreSQL varbitx插件门禁广告销售系统需求剖析和实践》

pilosa 数据结构

https://www.pilosa.com/docs/data-model/

pilosa的结构为行列布尔逻辑值BIT矩阵,行和列的含义存储在BoltDB的数据结构中。

pic

例如一张这样的表

create table tbl (c1 int, c2 text, c3 numeric, c4 timestamp);
insert into tbl values (1,'abc',4.0, now());
insert into tbl values (1,'ab12c',1.0, now());

转换为pilosa的结构,首先要对VALUE进行属性化转换,转换过程就是建立k-v的过程。属性即K-V。

例如,以上数据可以转换为以下属性。

c1:1  
  
c2:abc  
  
c2:ab12c  
  
c3:1.0-4.0  
  
c4:'2017-01-01 00:00:00'-now()  

属性建立后,转换为pilosa存储结构

1 (c1:1) -> 11  
2 (c2:abc) -> 10  
3 (c2:ab12c) -> 01  
4 (c3:1.0-4.0) -> 11  
5 (c4:'2017-01-01 00:00:00'-now()) -> 11  

为了便于使用,pilosa还将数据结构进行了拆分。

1、索引(index),索引是指在对原始数据进行属性化转换后,得到的bitmap数据。

可以对原始数据建立多个不同的属性转化,例如c1:1, c2:abc,ab12c, c3:1, c3:4, ...是一种,前面的例子又是另一种。不同的转换规则,建立不同的索引。

不能跨索引查询,只能在一个索引内查询。(因为跨索引的BITMAP可能没法对上号)

2、帧(frame)

为了便于查询,可以将一个索引,根据查询目标的不同,划分为多个帧。

例如ranked帧,按bitcount从大到小排列,便于查询基于行的属性TOPN。

pic

例如LRU帧,将最近访问的行排在前面,便于查询活跃的行。

pic

3、时间窗口(Time Quantum)

可以设置index的时间窗口,设置时间窗口后,会根据数据的时间自动创建对应的时间视图和对应的BITMAP VALUE。(if the time quantum is set to YMD, Range queries down to the granularity of a day are supported.)

pic

4、属性(Attribute),前面讲了,属性就是K-V,是为了得到bitmap,提前对原始数据所做的转换。

5、分片(slice),为了提高计算速度,将单行切分为多个分片,例如一行有1024个BIT,切成两个分片,分别对应512个BIT。

在计算时,每个分片是并行独立计算,最后合并结果的。

6、视图(View),视图是pilosa内部,自动维护的一个对外可见的逻辑视野,默认会创建一个与数据写入一致的标准视图。(行,列与数据写入时一致)

6.1、反转(inverse)视图bitmap,例如

SetBit(frame="A", rowID=8, columnID=3)  
SetBit(frame="A", rowID=11, columnID=3)  
SetBit(frame="A", rowID=19, columnID=5)  

反转视图和标准视图如下

pic

6.2、时间窗口视图(Time Quantums)

当用户设置了索引的时间窗口属性时,会自动生成对应的时间窗口视图

SetBit(frame="A", rowID=8, columnID=3, timestamp="2017-05-18T00:00")  
SetBit(frame="A", rowID=8, columnID=3, timestamp="2017-05-19T00:00")  

pic

以上是pilosa的数据模型,有利于统计类的查询。

pilosa 用户案例

https://www.pilosa.com/use-cases/

化学相似性分析

交通数据分析

网络流量分析

pilosa与传统数据库的关系

https://www.pilosa.com/docs/faq/

pilosa是一个用于加速统计类查询的in memory索引数据结构,允许用户自定义属性,建立bitmap,时间窗口视图等。同时内置了帧、切片等特性,加速查询。

pilosa不是数据库,也不能代替数据库,把它当成分析类SQL的加速引擎是可以的。

用户可以异步的方式,将数据导入pilosa,加速查询。

pilosa支持GO,python,java客户端驱动,或者调用pilosa API。

PostgreSQL 比特流类型

PostgreSQL 支持varbit类型,同时包含了一些bit的操作符,例如位移、与、或、异或、获取位置BIT等。

阿里云RDS PostgreSQL varbitx

阿里云rds PostgreSQL varbitx是varbit类型的扩展包,支持更多的BIT操作,例如SET BIT,批量SET,按数组提供的位置SET,求BIT COUNT,求指定位置范围的BIT COUNT,求特定数组提供的位置的BIT COUNT等。

详细介绍如下

《阿里云RDS for PostgreSQL varbitx插件与实时画像应用场景介绍》

PG varbit 应用

例如实时数据分析(与pilosa类似),基于varbit的人物画像,按标签圈人。门禁广告销售系统等。

小结

pilosa是一套golang编写的bitmap库,通过PostgreSQL plgo应该可以将其嫁接到PostgreSQL中,作为一个插件库来使用。

https://github.com/microo8/plgo

https://github.com/dbudworth/gopgfuncs

参考

https://github.com/zeromax007/gpdb-roaringbitmap

《阿里云RDS for PostgreSQL varbitx插件与实时画像应用场景介绍》

《PostgreSQL bitmapAnd, bitmapOr, bitmap index scan, bitmap heap scan》

《基于 阿里云 RDS PostgreSQL 打造实时用户画像推荐系统》

《PostgreSQL 与 12306 抢火车票的思考》

《门禁广告销售系统需求剖析 与 PostgreSQL数据库实现》

https://www.pilosa.com/

《PostgreSQL 9.6 sharding based on FDW & pg_pathman》

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
监控 数据可视化 关系型数据库
PostgreSQL主备库搭建
pg主备库的搭建,首先需在2个节点安装pg软件,然后依次在2个节点配置主备。 本文采用os为CentOS7.6,pg版本使用14.2,以下为详细部署步骤。
698 0
|
SQL 关系型数据库 数据库
PostgreSQL 删除数据库
PostgreSQL 删除数据库
261 0
|
弹性计算 网络协议 容灾
PostgreSQL 时间点恢复(PITR)在异步流复制主从模式下,如何避免主备切换后PITR恢复(备库、容灾节点、只读节点)走错时间线(timeline , history , partial , restore_command , recovery.conf)
标签 PostgreSQL , 恢复 , 时间点恢复 , PITR , restore_command , recovery.conf , partial , history , 任意时间点恢复 , timeline , 时间线 背景 政治正确非常重要,对于数据库来说亦如此,一个基于流复制的HA架构的集群,如果还有一堆只读节点,当HA集群发生了主备切换后,这些只读节点能否与新的主节点保持
1670 0
|
5月前
|
关系型数据库 数据库 PostgreSQL
PostgreSQL【应用 01】使用Vector插件实现向量相似度查询(Docker部署的PostgreSQL安装pgvector插件说明)和Milvus向量库对比
PostgreSQL【应用 01】使用Vector插件实现向量相似度查询(Docker部署的PostgreSQL安装pgvector插件说明)和Milvus向量库对比
212 1
|
12月前
|
存储 弹性计算 关系型数据库
实践教程之如何对PolarDB-X的存储节点发起备库重搭
PolarDB-X 为了方便用户体验,提供了免费的实验环境,您可以在实验环境里体验 PolarDB-X 的安装部署和各种内核特性。除了免费的实验,PolarDB-X 也提供免费的视频课程,手把手教你玩转 PolarDB-X 分布式数据库。本期实验将指导您如何对PolarDB-X的存储节点发起备库重搭。
|
Cloud Native 关系型数据库 分布式数据库
直播预告 | PolarDB-X 生产级关键能力开源升级解读:备库重搭原理与实践
备库重搭是指在备库发生故障时进行恢复的过程,PolarDB-X 基于自身特点实现一套备库重搭流程,可帮助用户及时恢复故障节点。本次分享主要介绍 PolarDB-X 中备库重搭的背景与原理,以及 PolarDB-X Operator 是如何实现 DN 备库重搭的。
|
存储 运维 Kubernetes
PolarDB-X 数据节点备库重搭
本文主要介绍PolarDB-X中DN(数据节点)备库重搭的背景,以及polardbx-operator上是如何实现DN备库重搭的。
PolarDB-X 数据节点备库重搭
|
SQL 关系型数据库 数据库连接
PG技术大讲堂 - Part 3:PostgreSQL建库与使用
PG技术大讲堂 - Part 3:PostgreSQL建库与使用
172 1
|
关系型数据库 数据库 PostgreSQL
PostgreSQL 删除数据库
PostgreSQL 删除数据库
139 0
|
SQL 关系型数据库 MySQL
如何迁移自建库用户密码和权限到RDS MySQL/PolarDB MySQL
如何迁移自建库用户密码和权限到RDS MySQL/PolarDB MySQL

相关产品

  • 云原生数据库 PolarDB