大数据之路 读书笔记 Day5 数据同步遇到的问题与解决方案

news2024/11/15 10:14:32

回顾

  • Day 4 数据同步
  • Day 3 无线客户端的日志采集

1. 分库分表的处理

在这里插入图片描述

分库分表(Sharding)是数据库水平扩展的一种策略,当单个数据库的性能和存储能力无法满足应用需求时,可以采用分库分表来分散数据和查询负载。它通常包括两个方面:分库(Database Sharding)和分表(Table Partitioning)。

分库(Database Sharding)

分库是指将一个大数据库分割成多个小的数据库,每个小数据库运行在不同的服务器上。这样做的目的是为了分散读写操作的压力,提高并发处理能力和数据存储容量。分库策略可以基于用户ID、地理位置、业务类型等进行数据的划分。

分表(Table Partitioning)

分表是在单个数据库内部对表进行分割,将一张大表按照一定的规则拆分成多张小表,这些小表可以分布在同一个数据库的不同表空间,也可以分布在不同的数据库中。分表可以基于范围(如日期)、列表(如地区代码)、散列(如用户ID的哈希值)等方式进行。

分库分表的关键考虑点:

  • 数据一致性:确保跨库跨表的数据一致性,可能需要使用分布式事务或者最终一致性的策略。
  • 数据分布策略:选择合适的数据分布算法,保证数据的均匀分布,避免热点问题。
  • 查询路由:设计合理的路由机制,能够根据查询条件将请求路由到正确的数据库和表。
  • 系统复杂性:分库分表会增加系统的复杂度,需要额外的管理开销和维护成本。
  • 数据迁移:如果现有系统需要进行分库分表改造,涉及到大量的数据迁移工作。

很明显,这种设计加大了同步处理的复杂度,试想一下,如果有一个中间表,具备将分布在不同数据库中的不同表集成为一个表的能力,就能让下游应用像访问单库单表一样方便。

在这里插入图片描述

阿里巴巴的TDDL(Taobao Distributed Data Layer)是一个分布式数据库的访问引擎,通过建立中间状态的逻辑表来整合统一分库分表的访问(见图3.8)。TDDL是在持久层框架之下、JDBC驱动之上的中间件,它与JDBC规范保持一致,有效解决了分库分表的规则引擎问题,实现了SQL解析、规则计算、表名替换、选择执行单元并合并结果集的功能,同时解决了数据库表的读写分离、高性能主备切换的问题,实现了数据库配置信息的统一管理。

2. 高效同步和批量同步

高效同步和批量同步通常指的是在数据迁移、数据复制或数据同步场景下,优化数据传输效率和资源利用的两种方法。这两种方法在不同场景下有着各自的优势和适用性。

高效同步

高效同步通常指的是在数据同步过程中,尽可能减少网络带宽使用、降低延迟和提高数据同步速度的技术。这可以通过以下几种方式实现:

  1. 增量同步:只同步自上次同步以来发生更改的数据,而不是整个数据集。这种方法减少了需要传输的数据量,提高了同步效率。

  2. 数据压缩:在数据传输前对其进行压缩,减少传输的数据体积,从而节省网络带宽。

  3. 并行传输:利用多线程或多进程技术,同时传输数据的不同部分,以充分利用网络带宽和计算资源。

  4. 智能缓存:使用缓存机制来存储已传输过的数据块,避免重复传输相同的数据。

  5. 断点续传:在数据传输中断后,可以从断点处继续传输,而不是从头开始,节省了重新传输的时间。

批量同步

批量同步则是指一次性传输大量数据的过程。这种同步方式适用于初始数据加载或定期的全量数据更新,尤其是在数据量非常大的情况下。批量同步的特点和优势包括:

  1. 全量更新:通常涉及整个数据集的传输,确保目标端的数据完全与源端一致。

  2. 计划执行:批量同步往往在低峰时段进行,以减少对生产环境的影响。

  3. 批量操作:一次处理大量数据,减少每单位数据的处理开销。

  4. 容错性:批量同步通常具有更好的错误恢复机制,确保即使在过程中遇到问题,也能完成数据的完整同步。

  5. 资源集中使用:在短时间内集中使用资源,以快速完成数据同步任务。

在实际应用中,高效同步和批量同步可能会结合使用,比如先进行一次全量的批量同步作为基线数据,然后通过高效的增量同步来维持实时的数据一致性。选择哪种方法取决于具体的应用场景、数据变化频率以及可用的网络和计算资源。

阿里巴巴的OneClick产品

阿里巴巴的OneClick产品主要是在其数据仓库和大数据处理框架中,用于简化数据同步和管理流程的一个关键组件。在阿里巴巴的大数据实践中,OneClick扮演着几个核心角色:

  1. 数据同步配置透明化
    OneClick通过自动化的方式处理不同数据源之间的同步配置,使得数据工程师和分析师能够轻松地设置数据同步任务,而无需深入了解底层技术细节。它通过库名和表名定位数据,自动获取元数据信息并生成相应的配置信息,从而简化了数据同步的初始化步骤。

  2. 一键化和批量化同步
    OneClick支持一键化的数据同步操作,即用户可以简单地点击一个按钮,就启动复杂的数据同步流程。此外,它也支持批量化同步,允许用户同时处理多个数据同步任务,这对于需要定期更新大量数据表的企业级应用来说是非常实用的功能。

  3. 增量同步与全量同步的整合
    在数据量不断增长的环境中,OneClick能够智能地判断何时进行增量同步(仅同步新变更的数据)和何时进行全量同步(同步整个数据集)。这种灵活性有助于优化资源使用,减少不必要的数据传输。
    在这里插入图片描述
    淘宝交易订单表,每天新增、变更的增量数据多达几亿条,历史累计至今的全量数据则有几百亿条。面对如此庞大的数据量,如果每天从业务系统全量同步显然是不可能的。可行的方式是同步当天的增量数据,并与数据仓库中的前一天全量数据合并,获得截至当天的最新全量数据(见图3.9)。这就是增量同步与全量同步的整合。

  4. 元数据管理和数据治理
    OneClick利用元数据能力,帮助管理数据仓库的深度和厚度,确保数据的规范和统一。这包括数据源的识别、数据质量的监控以及数据血缘的追踪,对于构建和维护健康的数据生态至关重要。

  5. ETL(Extract, Transform, Load)流程的优化
    在数据仓库的构建中,OneClick充当了ETL流程的一部分,负责数据的抽取、转换和加载。它通过离线和实时方式采集来自不同渠道的数据,并确保数据的格式和质量符合企业数据仓库的要求。

  6. 数据仓库建模和管理体系
    结合行业经验与阿里巴巴自身的特点,OneClick支持基于维度建模理论的模型设计,确保数据仓库的结构清晰、一致且易于理解和使用。

通过OneClick,阿里巴巴不仅提高了内部数据处理的效率,也为其客户和合作伙伴提供了一个强大且易于使用的数据同步和管理解决方案,推动了整个组织的数据驱动决策和业务创新。

3. 数据漂移的处理

数据漂移(Data Drift)是数据仓库和大数据处理中经常遇到的一个问题,特别是在操作数据存储(Operational Data Store,简称ODS)层面。数据漂移通常指的是数据在传输、加载或处理过程中发生的不一致或延迟现象,特别是当数据跨越不同的时间边界时,如跨越天、周或月的边界。

时间戳问题:在ODS层,由于业务系统的复杂性,同一笔业务可能涉及多个时间戳,如创建时间、修改时间、完成时间等。如果数据加载逻辑没有正确处理这些时间戳,可能会导致前一天或后一天的数据混入当前业务日期的数据中。比如,用户下单在1号11:59:59,但是由于延迟,记录在操作日志中的数据为12:00:01,这样第一天的数据就漂移到了第二天。

数据漂移的常见解决方案包括:

  • 增加冗余时间窗口:在数据加载时,可以增加前后的冗余时间窗口,比如加载今天的数据时,同时也加载昨天末尾和今天开始一段时间内的数据,以确保不会错过任何变更。

  • 精确的时间戳过滤:使用精确的时间戳字段过滤数据,确保只加载属于当前业务日期的数据。

数据漂移是数据工程和数据仓库管理中必须重视的问题,因为它直接影响到数据的质量和分析的准确性。在设计数据处理流程时,应充分考虑到数据漂移的可能性,并采取适当的预防和纠正措施。

实际案例

业务中常用的四个时间戳,为

  • modified_time,记录在数据库表中表示更新的时间
  • log_time,记录在数据库日志中表示更新的时间
  • proc_time,记录在数据库表中表示业务具体发生的时间
  • extract_time,标识数据记录被抽取到的时间

注:理论上,这四个时间戳应当保持一致,实际中extract_time常晚于前三个时间。

现在,在处理双11订单时发现,有一大批在11月11日23:59:59左右支付的订单漂移到了第二天,主要原因是用户下单支付后需要调用支付宝的接口而有所延迟,从而导致这些订单最后生成的时间跨天了,即modified_time和log_time晚于proc_time。

如果只有支付业务,那么我们直接以支付时间限制就可以获取正确数据,但是,订单包含多个业务过程,下单、支付、成功,每个业务都有自己的时间戳,并不只有支付业务数据会漂移。

如果直接多获取后一天的数据,然后限制一下时间,则可以读取到相关数据,比如限制到第二天12:15:00,但是,这个时候数据可能已经更新多次,即modified_time无法获取到当时最准确的数据。

因此,我们可以获取第二天15分钟数据后,限制多个业务(下单、支付、成功)的时间戳都为双11当天的,然后按modified_time做升序排列,获取数据首次变更的记录

此外,我们还可以根据log_time冗余当天最后15分和第二天凌晨前15分的数据,然后用modified_time过滤非当天数据,再按照log_time降序排序,取每个订单最后一次数据变更的记录。

最后,将两份数据根据订单做全外连接,将漂移数据补回到当天数据中。


点赞关注收藏,获取更多专业知识~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1926143.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

钡铼4G无线RTU助力智慧能源发展实现电网远程调控

随着全球对清洁能源和高效能源管理的需求日益增长,智慧能源技术正逐渐成为推动可持续发展的重要驱动力。在这一背景下,钡铼4G无线远程终端单元正在为智慧能源的发展和电网的远程调控提供强有力的支持。 钡铼4G无线RTU:智慧能源的神经网络 钡…

数据恢复篇:适用于 Android 的恢复工具

正在摆弄 Android 设备。突然,您意外删除了一张或多张图片。不用担心,您总能找到一款价格实惠的照片恢复应用。这款先进的软件可帮助 Android 用户从硬盘、安全数字 (SD) 或存储卡以及数码相机中恢复已删除的图片。 Android 上文件被删除的主要原因 在获…

Blender使用(二)点线面基本操作

Blender使用之点线面 1.编辑模式 tab键进行切换,为了方便菜单调出,可以设置键位映射为拖动时的饼菜单。 设置好后,按住tab键移动鼠标(注意不要点击鼠标),即可弹出编辑菜单。 默认是点模式,在左上角可进行点线面的切换…

Linux系统OpenSSH出现漏洞(CVE-2024-6387)修复

CVE-2024-6387 是一个影响 OpenSSH 服务器(sshd)的严重远程代码执行(RCE)漏洞,它允许未经身份验证的攻击者在受影响的 Linux 系统上以 root 权限执行任意代码。此漏洞尤其危险,因为它可以在不需要任何用户交…

husky 和 lint-staged 构建代码项目规范

目录 前言 最简单的方法 过 scripts 来解决如果检测工具多,需要多次处理 通过 husky(哈士奇)来解决容易遗忘的问题 1. 安装 2. husky init 3. 试一试​ lint-stadge 只 lint 改动的 1. 安装 2. 修改 package.json 配置 3. 添加 npm 脚本: 4.使用 Husky…

ETL数据集成丨主流ETL工具(ETLCloud、DataX、Kettle)数据传输性能大PK

目前市面上的ETL工具众多,为了方便广大企业用户在选择ETL工具时有一个更直观性能方面的参考值,我们选取了目前市面上最流行的三款ETL工具(ETLCloud、DataX、Kettle)来作为本次性能传输的代表,虽然性能测试数据有很多相…

类和对象 中篇

类和对象 中篇 ​ 在上篇中,我们介绍了类的基础部分,本篇我们讲解C类的六大默认成员函数 ​ 所谓默认成员函数,就是我们不写编译器也会自动生成,自动调用的函数。而自动生成的函数对内置类型的成员不会处理(有些高版本编译器会…

FreeRTOS 入门 知识

什么是FreeRTOS FreeRTOS 是一个轻量级的实时操作系统(RTOS),由 Richard Barry 在 2003 年开发,并且由亚马逊的 FreeRTOS 项目(一个由 Amazon Web Services (AWS) 支持的开源项目)进一步推动和发展。FreeR…

python开发遇到的坑汇总

文章目录 1.点击导入操作,所有配置全没了 1.点击导入操作,所有配置全没了 在 PyCharm 中,如果你遇到了点击导入(import)操作后,项目似乎进行了重新安装或重新部署的情况,这通常不是由简单的导入…

在Linux上设置MySQL允许远程连接的完整指南

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119qq.com] &#x1f4f1…

Vue3+Vite+TS+Axios整合详细教程

1. Vite 简介 Vite是新一代的前端构建工具,在尤雨溪开发Vue3.0的时候诞生。类似于Webpack Webpack-dev-server。其主要利用浏览器ESM特性导入组织代码,在服务器端按需编译返回,完全跳过了打包这个概念,服务器随起随用。生产中利用…

达梦数据库的系统视图v$sessions

达梦数据库的系统视图v$sessions 达梦数据库(DM Database)是中国的一款国产数据库管理系统,它提供了类似于Oracle的系统视图来监控和管理数据库。V$SESSIONS 是达梦数据库中的一个系统视图,用于显示当前数据库会话的信息。 以下…

数据结构(Java):LinkedList集合Stack集合

1、集合类LinkedList 1.1 什么是LinkedList LinkedList的底层是一个双向链表的结构(故不支持随机访问): 在LinkedList中,定义了first和last,分别指向链表的首节点和尾结点。 每个节点中有一个成员用来存储数据&…

Oracle 物化视图详解与实践

一.视图是什么? 普通视图只是存放在数据字典当中的子查询,本身没有数据,数据来源于基表,可以把普通视图当作编译好的sql语句。 二.物化视图是什么? 把查询到的数据存放起来,为了以后再次查询使用&#xff0…

NiFi1.25版本HTTPS模式下RestAPI使用入门

Apache NiFi 是一个强大的数据流处理工具,通过其 REST API,用户可以远程管理和控制数据流处理器。本文将介绍如何使用 NiFi 1.25 版本HTTPS 模式下Rest API,包括获取 token、获取组件信息、启动和停止组件、以及更改组件的调度频率等操作。 …

2.2动态库

动态库的特性 位置无关代码(PIC - position independent code) 库中的符号&#xff0c;不需要提前存储在可执行文件中&#xff0c;只有当链接时&#xff0c;可执行文件才会将需要的代码函数链接到内存中。 制作动态库 编写主函数 test.c #include<stdio.h> int main…

Java 设计模式系列:解释器模式

简介 解释器模式是一种行为型设计模式&#xff0c;它提供了一种构建抽象语法树的机制&#xff0c;并定义了如何解释这棵树。解释器模式属于编译原理中的语法制导翻译的范畴。 如上图&#xff0c;设计一个软件用来进行加减计算。我们第一想法就是使用工具类&#xff0c;提供对应…

优雅单片机之STM32C8T6----------程序下载(1)

0&#xff0c;C8T6系列 若想查看视频以及讲解&#xff0c;请查看B站或者抖音视频。 1&#xff0c;入门程序的下载&#xff08;本文&#xff09; 2&#xff0c;蓝牙控制&#xff08;待定&#xff09; 3&#xff0c;蓝牙小车&#xff08;待定&#xff09; 一&#xff0c;USB转…

springboot3 web

springboot web配置 springboot web的配置有&#xff1a; SpringMvc配置的前缀为&#xff1a;spring.mvcweb场景的通用配置为&#xff1a;spring.web文件上传的配置为&#xff1a;spring.servlet.multipart服务器相关配置为&#xff1a;server 接管SpringMVC 的三种方式 方…

深圳晶彩智能JC3636W518C开发环境Arduino IDE配置

深圳晶彩智能发布了JC3636W518C 这是一款中国制造的&#xff0c;铝合金外壳&#xff0c;价格非常震撼的开发板。原创是billbill的up播主萨纳兰的黄昏设计的ESP32太极小派&#xff0c;由深圳晶彩智能批量生产。 该款 LCD 模块采用 ESP32-S3R8 芯片作为主控,该主控是双核 MCU&…