博客
关于我
谈笑间学会数仓—维度层设计④
阅读量: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/

    你可能感兴趣的文章
    nft文件传输_利用remoting实现文件传输-.NET教程,远程及网络应用
    查看>>
    NFV商用可行新华三vBRAS方案实践验证
    查看>>
    ng build --aot --prod生成文件报错
    查看>>
    ng 指令的自定义、使用
    查看>>
    nghttp3使用指南
    查看>>
    Nginx
    查看>>
    nginx + etcd 动态负载均衡实践(三)—— 基于nginx-upsync-module实现
    查看>>
    nginx + etcd 动态负载均衡实践(二)—— 组件安装
    查看>>
    nginx + etcd 动态负载均衡实践(四)—— 基于confd实现
    查看>>
    Nginx + Spring Boot 实现负载均衡
    查看>>
    Nginx + uWSGI + Flask + Vhost
    查看>>
    Nginx - Header详解
    查看>>
    Nginx - 反向代理、负载均衡、动静分离、底层原理(案例实战分析)
    查看>>
    nginx 1.24.0 安装nginx最新稳定版
    查看>>
    nginx 301 永久重定向
    查看>>
    nginx css,js合并插件,淘宝nginx合并js,css插件
    查看>>
    Nginx gateway集群和动态网关
    查看>>
    Nginx Location配置总结
    查看>>
    Nginx log文件写入失败?log文件权限设置问题
    查看>>
    Nginx Lua install
    查看>>