数据中台入门
本文最后更新于:2024年10月29日 下午
数据中台入门
数据分层
从数据分层而言,主要分为一下五层:
- ODS层(原始数据层)
这一层存放原始数据,通常直接加载原始日志或数据源中的数据,并保持数据的原貌不做处理。它是后续数据处理的基础。
- DWD层(明细数据层)
该层与ODS层的数据结构和粒度保持一致,但对ODS层的数据进行了清洗,包括去除空值、脏数据和超过极限范围的数据等。有时也被称为DWI层。
- DWS层(服务数据层)
以DWD层为基础,这一层进行了轻度汇总。通常会聚集到以用户、设备、商家、商品等为主题的粒度,为上层的数据应用提供基础数据。
- ADS层(数据应用层)
面向实际的数据需求,以DWD或DWS层的数据为基础,组成各种统计报表。统计结果最终会同步到如RDS(关系型数据库服务)中,以供BI(商业智能)工具或应用系统查询使用。
- DIM层(维度层)
存放用于多个维度的快速查找、分组和排序等的数据。这一层主要用于整理和存储数据仓库中的维度信息。
数据处理流程
根据上面的数据分层,我们可以看到数据的处理流程是从源数据层开始的,然后逐渐向上处理,最终到达ADS层,最后返回给后台开发使用对应的数据。
以下按照数据处理架构的流程来介绍大数据的处理流程:
架构变迁过程
实习时候了解这个数据中台架构的变迁过程
最初各个业务层的数据库是独立的,后台开发者需要从各个业务的数据库中使用Mybatis获取数据,然后进行数据的处理。
源数据与ods层
源数据是指的进入数据中台的来源,一般是从各个业务层的数据库中获取,如MySQL、Oracle、SQLServer等。将原始数据库中的数据通过数据同步工具同步到数据中台的kudu数据库中,导入的数据就变成了ods层的数据。
在数据的传输方式中,一般有实时传输和离线传输两种方式。
离线传输
离线传输说白了就是一个批处理脚本,按照一定时间(如每天凌晨)从源数据库中拉取数据到数据中台的kudu数据库中。
实时传输
实时传输是指的数据的实时传输,一般是通过kafka等工具将数据实时传输到数据中台的kudu中。
在mysql中,可以通过binlog来实现数据的实时传输。具体逻辑和后端数据同步中的Canal类似(其实同步这块同步方法是相通的)。
在Oracle中,一般需要使用Oracle的GoldenGate(ogg)来实现数据的实时传输。ogg通过监听Oracle的redo log,然后将数据传输到kafka中,通过kafka的流处理来实现数据的实时传输。
dim层
dim层是维度层,主要是存放一些维度信息,如用户信息、商品信息、商家信息等。dim层的数据一般是不会变化的,一般是一次性导入的,然后不会再变化。
dw层
dw层是数据仓库层,主要是对ods层的数据进行清洗、去重、去脏数据等操作,然后将数据存储到dw层中。
ads层
ads层是数据应用层,主要是对dw层的数据进行汇总、统计等操作,然后将数据存储到ads层中。ads层是最终给后台开发者所使用的数据。后台开发者通过此数据反馈给前端做对应的数据展示。
数据同步的时效类型
实时同步
定义:数据一旦发生变化,几乎立即在系统之间进行同步。
适用场景:需要高精度和低延迟的数据传输,例如金融交易系统、实时监控系统。
优点:保证数据的一致性和及时性。
缺点:对系统性能要求高,可能需要更多的带宽和计算资源。
准实时同步
定义:数据同步延迟通常在几秒到几分钟之间,接近于实时,但允许一定的延迟。
适用场景:需要快速但不要求严格实时的数据传输,例如电商库存更新、社交媒体数据更新。
优点:平衡了数据同步的及时性和系统资源的使用。
缺点:数据可能在短时间内不完全一致。
定时同步
定义:按照预定的时间间隔(如每小时、每天)进行数据同步。
适用场景:不要求数据及时更新,但需要定期保证数据一致性,如数据备份、批量报告生成。
优点:系统资源利用率高,可根据业务需求灵活调整同步频率。
缺点:数据在两个同步周期之间可能会不一致。
手动同步
定义:数据同步由用户手动触发,通常用于数据量不大或不需要频繁更新的场景。
适用场景:如非关键的业务系统、测试环境的数据迁移。
优点:灵活性高,用户可根据需要决定同步时间。
缺点:依赖人工操作,可能会导致延迟或遗漏。
异步同步
定义:数据变化后会异步地进行同步,数据的传输和处理不会阻塞业务操作。
适用场景:对实时性要求不高的系统,如消息队列系统。
优点:降低了系统的耦合性,提升了操作的响应速度。
缺点:数据最终一致性需要通过其他机制保证。
同步复制
定义:数据在多个节点上同步复制,确保每个节点的数据在写入时保持一致。
适用场景:需要高可用性和一致性的系统,如数据库集群。
优点:保证数据一致性和高可用性。
缺点:性能开销较大,可能影响写入速度。