pilosa分布式位图数据库(2)

几种数据结构

Pilosa的元逻辑存储结构是一个bool矩阵,每一个cell的0/1表示行列是否存在关系。行和列可以表示任何东西,甚至可以表示相同的事物(这一点对基于pilosa思维优化查询和存储非常重要)。

基本的逻辑数据结构决定了业务的架构和封装模式。Pilosa的数据结构比文档数据库和传统关系数据库都多,是否能满足各种业务设计呢?是否满足就适合用呢?

Index

类似于mysql的table,mongo的collection,表示一个业务数据的命名空间,无法对两个以上的index做联合查询。

Column

column用ID表示,是顺序递增的整数,并且要赋予业务意义,是同一个index下面的所有frame共用,在index的作用域里是唯一的。

Row

row用ID表示,是顺序递增的整数,并且要赋予业务意义,在frame的作用域里是唯一的。

Frame

pilosa
frame其实是对应传统关系型数据库中的每一列的属性,是pilosa的row的高维结构,由多row组成,从平面形象上看,将数据表格上多行row的整体看做一个frame,这样划分可以对0/1的二元表示意义进行扩展,满足业务多状态的需求

  • ranked cache of a frame
    pilosa
    有序frame是通过行ID维护列计数的高速缓存,该缓存便于TopN查询,缓存大小默认为50,000

  • LRU cache of a frame
    pilosa
    LRU缓存维护frame最近访问的行

Slice 与分布式有关

切片是列组,是pilosa的column的高维结构,包含多个column,每个切片包含固定数量的列,有SliceWidth。和column的关系,从平面形象上看类似于frame和row的关系,但是frame是有业务意义的,slice是为了分布式设计,通过预设宽度划分column成切片,用一致性哈希算法将切片分布到各cluster

Attribute

在传统关系数据库里面关系表的数据,分为两种,一种是纯粹的关系,只存储ID,通过增删或者update status来表示关系的状态;另外一种关系同时已经是一种新的业务实体了,除了ID关系,还有业务属性。
第二种情况的附加业务属性就需要Attribute来支撑。

Time Quantums

time quantums在frame上设置支持时间序列,会产生额外的数据冗余,这允许范围查询缩小到指定的时间间隔。 例如 - 如果时间量被设置为YMD,则支持范围查询到一天的粒度。

如果帧具有时间量化,则为每个定义的时间段生成视图。 例如,对于时间量级为YMD的帧,以下SetBit()查询将导致下图中描述的数据:

View

视图表示frame的数据物理布局存在的可能情况

  • Standard view of frame

标准视图的行列是输入的行列对应的,也是index中一定存在的一个布局

  • Inverse view of frame
    pilosa
    反向视图的行列是输入的行列颠倒的,即输入的行对应frame的列,输入的列对应frame的行,是index中可选的一个布局,会和标准视图及其他视图并存,在行列的业务意义是相同的时候,比较有意义,例如行列都是user_id

  • Time Quantums of frame
    pilosa
    时间序列数据产生的多个布局,时间单位最小到小时,小时的布局包括年、月、日、时四个布局

几种业务案例

(未完待续……)