一种对数据仓库友好的数据库设计-阿里云开发者社区

开发者社区> 黑风寨1号> 正文

一种对数据仓库友好的数据库设计

简介: 系统可以分为两种:一种是 联机交易系统(OLTP),一种是在线分析系统(OLAP)。OLTP用来收集数据,然后把数据同步到OLAP,在OLAP中进行分析数据。 OLAP可以减少OLTP的负载,提高对数据的利用率。
+关注继续查看

系统可以分为两种:一种是 联机交易系统(OLTP),一种是在线分析系统(OLAP)。OLTP用来收集数据,然后把数据同步到OLAP,在OLAP中进行分析数据。
OLAP可以减少OLTP的负载,提高对数据的利用率。

数据同步方法

将数据从OLTP同步到OLAP,有两种方法:全量同步和增量同步。

  • 全量同步:每次把全表数据同步到OLAP对应的表
  • 增量同步:每次把有变动的数据同步到OLAP对应的表

与增量同步相比,全量同步每次都要同步所有的数据,花费的时间大,对系统的负载高。
与全量同步相比,增量同步的难点在与如何识别出增量数据。

OLTP中友好的数据库设计

在建表的时候,包含如下字段:

  • 主键:每个表都有一个主键
  • created_time:表明数据是什么时候创建的,以后一直不变
  • modified_time:表明数据是什么时候修改的,每次修改,这个字段都会更新成最新的时间
  • deleted_flag:不物理删除,如果想要删除数据,就在将这个字段设为true。只要设置为true之后,以后一直不变,且modified_time也不再改变

同步过程

数据仓库一般分为ODS层和DW层。ODS存储OLTP中的原始数据,同步的过程主要发生在ODS层。方法如下:

只要modified_time为当天的记录,就是当天的增量数据。
所以,在同步的时候,只要对modified_time进行判断即可。

可能出现的异常:
比如,有一条记录A,创建日期是在20170304,但是在20170305 00:20有修改,然后修改时间变成了20170305。
同步任务本来是在20170305 00:00进行同步,但是由于调度延迟的问题,导致同步任务在20170305 00:30开始执行。
这个时候,就会漏掉记录A。因为在同步的时候,记录A的修改时间已经变成了20170305了。

一种解决办法是,将同步的条件修改为:
只要modified_time为当天的记录,或者created_time为当天的记录,就是当天的增量数据。

去重过程

在DW层对ODS层的表进行汇总需要去重。因为同一条记录可能经过多次修改,这些修改是发生在不同的日期中的。
去重的方法是使用分析函数row_number()over(partition by primary_key order by modified_time desc)。即,根据主键,取modified_time最新的记录。
同时在这个过程中,剔除deleted_flag为true的记录。

数据校验过程

在DW层对ODS层数据去重之后,就得到了和生产相同的数据。是否真的正确,可以使用如下的方法验证:

DW层的数据量 = 生产上所有的数据量(total) - 今天创建的数据量(created) - 今天之前删除的数据量(deleted)

check

以表table_a为例子

total = select count(*) from table_a
created = select count(*) from table_a where created_time = T+1
deleted = select count(*) from table_a where created_time <= T and modified_time < = T and deleted_flag = true
result = total - created - deleted

在这个过程中,不太好理解的是删除的数据量(deleted)的计算方法。可以这样想:
如果modified_time为今天,那么可以确定在今天之前,这条数据是存在的,因为deleted_flag为true后modified_time就不变了。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
7238 0
三个例子,让你看懂数据仓库多维数据模型的设计
一、概述   多维数据模型是最流行的数据仓库的数据模型,多维数据模型最典型的数据模式包括星型模式、雪花模式和事实星座模式,本文以实例方式展示三者的模式和区别。 二、星型模式(star schema)   星型模式的核心是一个大的中心表(事实表),一组小的附属表(维表)。
966 0
数据仓库建设步骤
数据仓库建设步骤Posted on 2015-03-04 10:18 xuzhengzhu 阅读(1164) 评论(0) 编辑 收藏 1.系统分析,确定主题 确定一下几个因素:    ·操作出现的频率,即业务部门每隔多长时间做一次查询分析。
1338 0
数据仓库建模方法初步
一、前言     数据仓库得建模方法同样也有很多种,每一种建模方法其实代表了哲学上的一个观点,代表了一种归 纳,概括世界的一种方法。目前业界较为流行的数据仓库的建模方法非常多,这里主要介绍范式建模法,维度建模法,实体建模法等几种方法,每种方法其实从本质 上讲就是从不同的角度看我们业务中的问题,不管从技术层面还是业务层面,其实代表的是哲学上的一种世界观。
1190 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
8920 0
数据仓库中如何使用索引
原文:数据仓库中如何使用索引 数据仓库的索引是个棘手的问题。如果索引太多,数据插入很快但是查询响应就会很慢。如果太多索引,数据导入就很慢并且数据存储空间更大,但是查询响应更快。数据库中索引的作用就是加快查询速度,不论是传统数据库还是数据仓库。
2278 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
5824 0
11
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《Nacos架构&原理》
立即下载
《看见新力量:二》电子书
立即下载
云上自动化运维(CloudOps)白皮书
立即下载