博客
关于我
谈笑间学会数仓—维度层设计④
阅读量:601 次
发布时间:2019-03-12

本文共 840 字,大约阅读时间需要 2 分钟。

谈笑间学会数仓—维度层设计④

极限存储

历史拉链存储是处理缓慢变化维度的一种方式。通过新增start_dt和end_dt两个时间戳字段,将变更数据按时间戳存储。这种方式通常用于处理时间.grain为天的维度。

示例分析:以商品维度为例,假设卖家A于2020-1-1发布商品B和C,并于2020-1-2下架B并发布D。采用全量存储,1月1日分区存储t1和t2,1月2日分区存储更新后的t1及t2和t3。

采用历史拉链存储后,不变数据不重复存储。下游应用可通过限制start_dt和end_dt范围获取历史数据。

实例操作:

  • 1月1日数据:start_dt <= '20200101'且end_dt > '20200101'
  • 1月2日及以后:前端应用自动处理

优缺点分析:

  • 优势:
    • 透明化处理,便于下游用户理解
    • 适合变化频率低的维度
  • 缺陷:
    • 数据分区膨胀带来性能负担
    • 解释成本高,对非技术用户不友好

极限存储解决方案

为应对上述问题,采用极限存储方案:

透明化处理:

  • 基于历史拉链存储,应用视图或Hive hook技术转换查询语句。用户面临全量存储表和极限存储表一致。

分区优化:

  • 分区开启月初重新生成整体历史数据,最大分区数约为5232,显著减少存储成本。

存储优化策略:

  • 创建全量存储表,仅存储大范围内的近期数据,便于用户访问。
  • 历史数据通过映射关联到基线表,保证用户无感知。
  • 对变化频率高字段进行过滤,确保极限存储存储效率。
  • 微型维度设计

    维度过度增长会影响极限存储效果。解决方案:

    垂直拆分技术:

    • 将稳定属性分离,割裂维度,保持主维度稳定。

    微型维度优化:将不稳定属性归类至独立维度,基于组合代理键构建。如用户维度,移除VIP等级和信用评价相关字段,分别维护,可在买家维度引用。

    实际应用考量:

  • 枚举值适用性有限,非枚举属性需谨慎处理。
  • ETL复杂度查高,需投入研发资源。
  • 微型维度破坏了浏览性,需额外维护。
  • 优化建议:在不可避免的局限性下,合理选择存储策略,最大化节省成本。

    转载地址:http://kcdxz.baihongyu.com/

    你可能感兴趣的文章
    org.hibernate.HibernateException: Unable to get the default Bean Validation factory
    查看>>
    org.hibernate.ObjectNotFoundException: No row with the given identifier exists:
    查看>>
    org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
    查看>>
    org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
    查看>>
    org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size exceeded
    查看>>
    org.tinygroup.serviceprocessor-服务处理器
    查看>>
    org/eclipse/jetty/server/Connector : Unsupported major.minor version 52.0
    查看>>
    org/hibernate/validator/internal/engine
    查看>>
    SQL-36 创建一个actor_name表,将actor表中的所有first_name以及last_name导入改表。
    查看>>
    ORM sqlachemy学习
    查看>>
    Ormlite数据库
    查看>>
    orm总结
    查看>>
    os.path.join、dirname、splitext、split、makedirs、getcwd、listdir、sep等的用法
    查看>>
    os.system 在 Python 中不起作用
    查看>>
    OSCACHE介绍
    查看>>
    SQL--合计函数(Aggregate functions):avg,count,first,last,max,min,sum
    查看>>
    OSChina 周五乱弹 ——吹牛扯淡的耽误你们学习进步了
    查看>>
    OSChina 周四乱弹 ——程序员为啥要买苹果手机啊?
    查看>>
    OSError: no library called “cairo-2“ was foundno library called “cairo“ was foundno library called
    查看>>
    Osgi环境配置
    查看>>