解释拉链表!

拉链表是针对数据仓库设计中表存储数据的方式而定义的,顾名思义,所谓拉链,就是记录历史。记录一个事物从开始,一直到当前状态的所有变化的信息。

拉链表的使用场景

  • 在数据仓库的数据模型设计过程中,经常会遇到下面这种表的设计;
  • 有一些表的数据量很大,比如一张用户表,大约10亿条记录,50个字段,这种表即使使用ORC压缩,单张表 的存储也会超过100G,在hdfs使用双备份或者三备份就更大了;
  • 表中的部分字段会被update更新操作,如用户联系方式,产品的描述信息,订单的状态等;
  • 需要查看某一时间点或者时间段的历史快照信息,比如查看某一订单在历史某一时间点的状态;
  • 表中的记录变化的比例和频率不是很大,比如,总共有10亿的用户,每天新增和发生变化的有200万左右, 变化的比例占的很小。

 

对于这种表的设计,有几种方案可选

  • 方案一:每天只留最新的一份,比如我们每天用datax抽取最新的一份全量数据到Hive中
  • 方案二:每天保留一份全量的切片数据
  • 方案三:使用拉链表

 

使用拉链表的原因

  • 对于方案一,实现起来很简单,每天删除前一天的数据,重新抽一份最新的。优点很明显,节省空间,一些普通的使用也很方便,不用在选择表的时候加一个时间分区。缺点同样很明显,没有历史数据,想翻旧账只能通过其他方式,比如从流水表里抽。
  • 对于方案二,每天一份全量的切片是一种比较稳妥的方案,而且历史数据也在。缺点就是存储空间占用太大太大,如果对这边表每天都保留一份全量,那么每次全量中会保存很多不变的信息,对存储是极大的浪费。
  • 对于方案三,拉链表在使用上基本兼顾了我们的需求。首先在空间上做了一个取舍,虽说不像方案一那样占用量那么小,但是它每日的增量可能只有方案二的千分之一甚至是万分之一。它能满足方案二所能满足的需求,既能获取最新数据,也能添加筛选条件获取历史数据,所以我们还是很有必要使用拉链表。

回复

共1条回复 我来回复
  • 迷失技术de小猪
    迷失技术de小猪
    稍等伙伴们,思考简介中~
    评论

    拉链表是针对数据仓库设计中表存储数据的方式而定义的,顾名思义,所谓拉链,就是记录历史。记录一个事物从开始,一直到当前状态的所有变化的信息。

    拉链表的使用场景

    • 在数据仓库的数据模型设计过程中,经常会遇到下面这种表的设计;
    • 有一些表的数据量很大,比如一张用户表,大约10亿条记录,50个字段,这种表即使使用ORC压缩,单张表 的存储也会超过100G,在hdfs使用双备份或者三备份就更大了;
    • 表中的部分字段会被update更新操作,如用户联系方式,产品的描述信息,订单的状态等;
    • 需要查看某一时间点或者时间段的历史快照信息,比如查看某一订单在历史某一时间点的状态;
    • 表中的记录变化的比例和频率不是很大,比如,总共有10亿的用户,每天新增和发生变化的有200万左右, 变化的比例占的很小。

     

    对于这种表的设计,有几种方案可选

    • 方案一:每天只留最新的一份,比如我们每天用datax抽取最新的一份全量数据到Hive中
    • 方案二:每天保留一份全量的切片数据
    • 方案三:使用拉链表

     

    使用拉链表的原因

    • 对于方案一,实现起来很简单,每天删除前一天的数据,重新抽一份最新的。优点很明显,节省空间,一些普通的使用也很方便,不用在选择表的时候加一个时间分区。缺点同样很明显,没有历史数据,想翻旧账只能通过其他方式,比如从流水表里抽。
    • 对于方案二,每天一份全量的切片是一种比较稳妥的方案,而且历史数据也在。缺点就是存储空间占用太大太大,如果对这边表每天都保留一份全量,那么每次全量中会保存很多不变的信息,对存储是极大的浪费。
    • 对于方案三,拉链表在使用上基本兼顾了我们的需求。首先在空间上做了一个取舍,虽说不像方案一那样占用量那么小,但是它每日的增量可能只有方案二的千分之一甚至是万分之一。它能满足方案二所能满足的需求,既能获取最新数据,也能添加筛选条件获取历史数据,所以我们还是很有必要使用拉链表。
    1个月前 0条评论
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载