一.同步方式
1)直连同步:通过定义好的规范接口API和基于动态链接库的方式。优点:配置简单,实现容易。缺点:对源系统的性能影响较大,当执行大批量数据同步时会降低甚至拖垮业务系统的性能。
2)数据文件同步:通过约定好的文件编码,大小,格式等,直接从源系统生成数据的文本文件,由专门的文件服务器,如FTP服务器传输到目标系统后,加载到目标数据库系统中。优点:支持多种数据库,简单实用,通过压缩和加密也能提高效率。缺点:可能出现丢包和错误,需要多传校验文件。
3)数据库日志解析同步:数据库日志解析同步方式实现了实时与准实时同步的能力,延时可以控制在毫秒级别,对业务系统的性能影响也比较小,目前广泛应用于业务系统到数据仓库系统的增量数据同步应用之中。
二.阿里数仓的同步方式
1.数据库的多样性 2.数据库的量级大
1)批量数据同步(Datax),以插件形式提供支持,将数据从数据源读出并转换为中间状态,同时维护好数据的传输,缓存等工作,整个过程是基于内存的,保证了高速数据交换。
2)实时数据同步
具体来说就是建立一个数据交换中心,通过专门的模块从每台服务器源源不断地读取日志数据,或者解析业务数据库系统的binlog或者归档日志,将增量数据以数据流的方式不断同步到日志交换中心,然后通知所有订阅这些数据的数据仓库系统来获取。
三.数据同步的问题和解决方案
3.1 分库分表的处理
阿里的TDDL是一个分布式数据库的访问引擎,通过建立中间状态的逻辑表来整合统一的分库分表的访问。
3.2高效同步和批量同步
oneclick
3.3增量和全量同步的合并
大数据平台对update不怎么支持,现在比较推荐使用全外连接(full outer join)+数据全量覆盖重新加载的方式。
3.4 同步性能的处理(有待研究)
3.5 数据漂移的处理
数据漂移是ODS数据的一个顽疾,通常是指ods表的同一个业务日期数据中包含前一天或者后一天凌晨附近的数据或者丢失当天的变更数据。
ODS一般是面向历史的细节数据查询需求,所以需要物理落地到数据仓库的ODS表按照时间段来切分进行分区存储,通常会按照时间戳切分,但实际上由于时间戳字段的准确性问题导致发生数据漂移。
时间戳一般分为:modified_time,log_time,proc_time,extract_time
处理方案:
1)多获取后一天的数据
2)通过多个时间戳字段限制时间来获取相对准确的数据