Hana 实时数据同步优化(3)

简述

CloudCanal 近期对 Hana 源端链路做了新一轮优化,优化点主要来自用户实际场景使用,这篇文章简要做下分享。

本轮优化主要包含:

  • 新增任务级增量表
  • 新增增量表定时清理能力
  • 新增增量表表结构自动演进能力
  • 任务延迟判定优化
  • Hana 1.x 的兼容
  • 产品化和文档优化

优化点

任务级增量表

CloudCanal Hana 源端任务原本不支持修改默认增量表,导致不同任务的触发器将增量数据写入同一个表,不同任务将相互影响。

比如,A 任务订阅的表积压大量数据,将影响B,C,D等订阅相同表的任务增量同步效率。

为解决这一问题,本轮优化支持 每个任务可单独设置增量表 ,以此确保任务之间互不影响。

image.png

增量表定时清理

触发器将增量数据写入增量表后,若未及时清理,可能导致空间占用增加。

在之前的版本中,用户只能手动定期清理,过程繁琐且具备一定风险(清理错)。

本轮优化增加设置任务参数 triggerDataCleanEnabled 打开自动定时清理增量表功能,并提供两个参数进行控制:

  • triggerDataCleanIntervalMin:增量表清理间隔(单位:分钟)
  • triggerDataRetentionMin:增量表数据保留时间(单位:分钟)

通过这套机制,用户能够灵活控制增量表的清理操作,同时确保未消费的增量数据不会被意外清除。

image.png

增量表自动演进

Hana 增量任务创建时自动生成增量表,CloudCanal 依赖于增量表实现各种能力,但随着 CloudCanal 版本更新,可能对增量表进行变更(比如加入新字段)。

由此带来的问题是:用户在更新 CloudCanal 后需要手动执行 DDL 以适应增量表结构的变化,若存在大量增量表,操作相当复杂。

为解决此问题,CloudCanal 新增 增量表结构 DIFF 能力,在任务启动时 自动生成差异 DDL 实现对增量表的自动演进

image.png

延迟判定优化

Hana 源端增量同步使用位点(增量表自增ID)来判断延迟,当位点向前推进时可准确获取延迟,但若无变更事件导致位点不更新,延迟会持续增大,实际上并未发生延迟。

为解决这一问题,本轮优化 通过查询增量表来判断是否存在延迟,具体逻辑为:

  • 若存在数据,系统根据增量数据的时间戳计算延迟。
  • 若无数据,任务获取当前时间发送心跳事件,并根据心跳上的时间戳计算延迟。

时间戳仅在重置位点时才用于数据查找,且在查找时进行时区转换处理。

Hana 1.x 的兼容

CloudCanal 之前版本只支持 Hana 2.x 版本,但是随着用户使用,我们发现一些用户还是在使用 Hana 1.x 版本。

Hana 1.x 版本的触发器和 2.x 存在一定的差异,且元信息获取逻辑也不同

本轮优化对上述差异点进行了兼容性优化,使 CloudCanal 能够比较全面的支持 Hana 1.x 和 2.x 版本的数据同步。

产品化增强

本轮优化除了内核层面增强,对产品能力和文档做了一系列优化,有效解决用户在数据源添加、任务创建等环节中常见的权限问题。

  • 完善 Hana 权限准备文档、数据源创建 FAQ
  • 创建任务时预检 Schema、增量表的权限
  • 创建任务勾选表时,自动过滤当前任务增量表

这些优化举措让用户创建迁移同步链路更加流畅,节省时间。

未来方向

更多目标链路

目前 Hana 支持的目标端有 MySQLStarrocksDoris 等,接下来的版本将打通 TiDBOceanBaseAdbForMySQL 等目标链路,这个需求主要来自于用户。

优化多字段触发的处理速度

在处理多字段表(单个表 300+ 字段)时,目前触发器的执行效率不满足预期,导致 DML 操作速度较慢,我们后续将对触发器模板进行性能优化,以提高处理速度。

总结

本文简要介绍 CloudCanal 近期对 Hana 源端数据同步的优化,以及链路未来的方向,希望对读者有所帮助。

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

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

相关文章

Oracle数据库19c OCP 1z0-082考场真题解析第24题

考试科目:1Z0-082 考试题量:90 通过分数:60% 考试时间:150min 本文为云贝教育郭一军guoyJoe原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。【云贝教育】Orac…

玻璃酒瓶市场分析:行业仍呈现长期向好的发展势头

玻璃工艺酒瓶的外表可以让别人领略到中国酒文化的艺术价值。在这些玻璃上,风景、人物、动物、书法艺术等图案记载着酒的历史、典故、产地等信息,此外青花、粉彩、素釉、斗彩、珐琅彩和五彩等瓷艺无所不包,算得上是现代藏品中的"古玩会&q…

X3En【禾川】

地址: P9-00 波特率:【005】 DI: P4.0 滤波【微秒us】P4.1 DI1【1】使能 P4.2 DI2【2】复位 P4.3 DI3【13】禁止脉冲 P4.4 DI4【5】 P4.5 DI5【25】 P4.6 DI6【14】 P4.7 DI7【15】 P4.8 DI8【0】 P4.9 DI9【0】P4.11 DI1【逻辑】0低电…

Nacos:微服务架构的得力助手

Nacos是一个开源的、易于使用的平台,用于构建云原生应用和微服务架构。它提供了一系列关键功能,帮助开发者更高效地管理和协调微服务。 一、Nacos的功能 1. 服务发现:在微服务架构中,服务的网络位置是动态变化的。Nacos通过服务注…

Java并发之互斥一:管程

1、简单聊聊什么是管程模型 (共享资源):定义一个共享变量,可以理解锁,令牌这类的东西(互斥访问共享资源):获取这个锁、令牌的时候是排好队的,只允许单线程访问&#xff…

Gorm 数据库表迁移与表模型定义

文章目录 一、Docker快速创建MySQL实例1.1 创建1.3 创建数据库 二、AutoMigrate介绍与使用2.1 AutoMigrate介绍2.2 AutoMigrate 基本使用 三、模型定义3.1 模型定义3.2 快速增删改查3.3 约定3.4 gorm.Model 四、表模型主键、表名、列名的约定4.1 主键(Primary Key&a…

动态规划Day02

62.不同路径 力扣题目链接(opens new window) 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。…

WPF XAML(一)

一、XAML的含义 问:XAML的含义是什么?为什么WPF中会使用XAML?而不是别的? 答:在XAML是基于XML的格式,XML的优点在于设计目标是具有逻辑性易读而且简单内容也没有被压缩。 其中需要提一下XAML文件在 Visu…

HR_net逐步实现过程(2.2)

1.numpy实现数组卷积操作 这里是一个矩阵,换个图试一下 import numpy as np #输入数组 input_imagenp.array([[1,2,3],[4,5,6],[7,8,9]]) #卷积核 kernelnp.array([[1,0],[0,1]]) #卷积操作 output_imagenp.zeros((2,2)) for i in range(2):for j in range(2):out…

1886_emacs_v29中的行号配置

Grey 全部学习内容汇总: GitHub - GreyZhang/editors_skills: Summary for some common editor skills I used. emacs 29中的行号显示配置 行号显示 行号显示是一个编辑器中很常见的功能,我觉得这个功能的需求度可能因人群或者个人习惯而不同。对于只…

【python、pytorch】NLP模型

自然语言处理(Natural Language Processing,简称NLP)是计算机科学与语言学中关注于计算机与人类语言间转换的领域。 1. 文本预处理 文本预处理详情 4. RNN模型

如何给字符串字段添加索引

MySQL是支持前缀索引的,可以定义字符串的一部分作为索引,如果创建索引的语句不指定前缀长度,那么索引就会包含整个字符串。 alter table SUser add index index1(email);alter table SUser add index index2(email(6)); 如上两个创建索引的语…

完整的模型训练套路(一、二、三)

搭建神经网络 model import torch from torch import nn#搭建神经网络 class Tudui(nn.Module):def __init__(self):super(Tudui, self).__init__()self.model nn.Sequential(nn.Conv2d(3, 32, 5, 1, 2),nn.MaxPool2d(2),nn.Conv2d(32, 32, 5, 1, 2),nn.MaxPool2d(2),nn.Conv…

Godot游戏引擎有啥优势

游戏开发是一个充满创造力和技术挑战的领域。选择适合的游戏引擎是开发过程中至关重要的决策。在众多的游戏引擎中,Godot以其许多的优势吸引着越来越多的开发者。下面简单的介绍一下Godot游戏引擎的优势。 免费和开源 Godot游戏引擎的免费和开源特性是优势之一。开…

动态规划day03

343. 整数拆分(第二次做还是没弄明白) 力扣题目链接(opens new window) 给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。 示例 1: 输入: 2输出: 1解释: 2 1 1, 1 1 1。 示例 2: 输入: …

redis 相关面试题(一)

redis 相关面试题(一) 文章目录 redis 相关面试题(一)**面试官**:什么是缓存穿透 ? 怎么解决 ?**面试官**:好的,你能介绍一下布隆过滤器吗?**面试官**:什么是缓存击穿 …

Vue2-导航守卫

在Vue中,导航守卫是一组用于控制路由导航的钩子函数。这些钩子函数允许你在路由导航的不同阶段执行一些操作,比如在路由切换之前进行验证、处理路由变化等。 Vue提供了三种类型的导航守卫: 全局前置守卫:在路由切换之前执行&…

C语言通过ODBC函数操作Access数据库(mdb和accdb格式)(char字符数组)

编译环境:Windows XP Visual Studio 2010 数据库:Access 2010,accdb格式 本例程只使用char[]字符数组,不使用wchar_t[]字符数组,更适合C语言初学者。 如果读取字符串时,提供的字符数组空间小了&#xff0c…

【Linux】Linux 系统编程——tree 命令

文章目录 1. 命令概述2. 命令格式3. 常用选项4. 相关描述4.1 tree 命令安装 5. 参考示例5.1 创建树形目录5.2 使用 tree 命令查看树形目录 1. 命令概述 tree 命令用于在命令行界面以树状图形式显示目录及其子目录的内容。这个命令递归地列出所有子目录,并可选择显示…

如何设置 QTableView 表格每列数据的对齐方式?

要设置 QTableView 表格每列数据的对齐方式,您可以使用 QStandardItemModel 的 setData() 方法来为每个单元格设置对齐方式。以下是一个示例: // 创建数据模型和设置表头略...// 设置列对齐方式 model->setData(model->index(0, 0), Qt::AlignLef…