note icon indicating copy to clipboard operation
note copied to clipboard

分析数据库学习记录 OLAP

Open Yhzhtk opened this issue 6 years ago • 0 comments

个人理解的特点

  • 是一个 MySQL 的存储引擎,使用协议语法同 MySQL,接入非常简单;
  • 列式存储+压缩(最高压缩比30:1),相同数据量使用机器数少,有效降低机器成本;
  • 根据数据特性选择压缩算法,如 GZIP, LZ4;
  • 通过 build on insert, build on select 构建多个额外的 meta 数据,提高查询效率;
  • 同类产品:Infobright(起源),Sybase,HANA,Vertica,Greenplum

存储结构剖析

HiStore 是按 Node (包) 为单位来存储数据,默认一个包有 64k 条数据。只有一个包存满 64 k才会刷到磁盘。

如下图,HiStore 除了数据列式压缩存储按 Nodes 存储,还会有单独一块 Meta 信息(包括MDN,Numeric Histogram,String & Character MAP,Distributions,Pack-2-Pack),一直在内存中,提高查询时的效率。

image

以下都是 Nodes 维度的数据

MDN

  1. build on insert
  2. 记录这个 Node 的最大值、最小值、平均值、计数等

Numeric Histogram

  1. build on insert
  2. 仅有数值类的列才会存在
  3. 把当前 Node 所有数据按最小值到最大值划分为 1024 个区间,每个区间以 0,1 表示在这个区间内是否值存在

String & Character MAP (知识图谱)

  1. build on insert
  2. 仅有字符串的列才会存在
  3. 以 ascii 码(128个) 作为行,以 字符串位置(第几个,最大64) 作为列的一个二进制表格,默认二进制表格全是0,在字符对应的作为置1。如 abc,bbc 两个字符串, abc 对应的三个位置 (a, 1), (b, 2), (c, 3) 置为1, bbc 对应的三个位置 (b, 1), (b, 2), (c, 3) 置为1。 当字符串超过 64 则截断

Distributions

  1. build on insert
  2. 存储某个区间的数量范围

Pack-2-Pack

  1. build on select
  2. 当有过一次 join 查询后才会构建
  3. 对 join 的两个列所在的包,记录一个二进制表格,默认全是 0,如果 join 有结果,则置为1。 如 Node A 的c1列 和 Node B 的d1列有 join 结果,那么在对应的位置置为 1。

仔细品读,发现上面做的这些查询优化都非常的有趣,哈哈哈。

Yhzhtk avatar Mar 29 '19 10:03 Yhzhtk