zoukankan      html  css  js  c++  java
  • 一种更高查询性能的列存储方式MaxMinT 第一部分

    简介
    本文描述了一种列存储方式和对应的查询方法,这种存储方式具有更好的查询性能和更小的存储空间。

    And查询

    本文先用直观的图形方式展示and查询时的方式,这也是算法要解决的问题核心。
    通常在OLAP数据查询时,需要进行and处理,例如你需要获取 year = 2017 and customer = 13 的数据,这在列存储中实际是对值 year的2017这个列和 customer的13列进行and操作,而这些列一般都使用位图的方式存储。
    市面上有很多位图的存储方式,比如WAH, EWAH, Concise和Roaring Bitmap。他们有各自的优缺点,今天我设计的就是一个新的存储方法,我给他起了一个名字,MaxMinT。
    OLTP数据也是如此,只不过OLTP通常使用行存储而不是列存储,因此不适合此算法。
    下图展示了这两个列的数据抽象概念,空白的区域表示全部都是0的数据,而阴影的部分表示具有比较密集的有效数据的区域。当进行and 操作时,结果就是红色原因部分的区域,即共同拥有的部分。

    为找到这些红色区域,我们首先从开头的位置创建一条线,从程序上来说就是创建一个游标,初始化为0。

    检测所有参与and运算的列,在这个案例中只有两个列year.2017和customer.13,顺序扫描这些列,确定列是否处于空白区域,如果是,那么获得到此空白区域的最下端位置nextPos,如果阴影区域,不用计算下端位置。

    如果至少有一列处于空白区域,那么获取到nextPos的最大值,将游标移动到此位置,表示这些位置没有任何输出结果,如下图所示。



    现在,继续重复刚才的扫描,由于当前位置没有任何一个列处于空白区域,那么就获取这些列的阴影最下端位置,现在我们获取这些阴影区域的最小值,将游标移动到此位置,那么这个区域就是有效的区域,作为and的输出结果,如下图所示。

    重复此操作,直到文件的末尾。

     我将在第二章介绍数据的存储方式。

  • 相关阅读:
    Programming WCF Services作者序
    《软件设计精要与模式》书评
    Programming WCF Services翻译笔记(九)
    检验团队是否敏捷的四个标准
    Programming WCF Services翻译笔记(八)
    Oracle BIEE (Business Intelligence) 11g 11.1.1.6.0 学习(3)创建一个简单的分析
    oracle express 11g 创建表空间
    vmware8安装win2008 r2后找不到网卡驱动的解决办法
    javascript:巧用eval函数组装表单输入项为json对象
    javascript:二叉搜索树 实现
  • 原文地址:https://www.cnblogs.com/tansm/p/OLAP_Column_MaxMinT_1.html
Copyright © 2011-2022 走看看