• 七分钟,数据转换器get到了


    0fa34c432ee37899ce294236cc0ad936.gif

    全文阅读时间 | 预计七分钟

    KING BASE

    开源 OR 闭源?

    在瞬息多变的软件市场上,开源还是闭源是一个恒久不变的话题。开源软件得益于基础架构和基本功能的全面开放,开发者能自由使用和二次开发,但使用前提是需要投入大量成本对软件进行学习,后续维护也需要投入一定的精力。

    反之,闭源软件依靠于开发厂商,在软件的稳定性上优于开源软件,也正是因为闭源的原因,当软件出现错误时,客户需要联系厂商进行问题定位和修复,对效率就会产生负面影响,严重时甚至会阻塞项目流程。

    半开半闭的软件使用形态

    4191d61b27c7a9b4e32254fa977fc7ed.gif

    KFS提供了一种半开半闭的软件使用形态:对外不开放自己的基础架构和基础功能,但对一些核心功能的扩展提供了开放接口,客户或者开发者可利用这些接口进行二次开发以适配自己的项目或者一些特殊场景,极大提高了KFS软件的易用性和可维护性。

    KING BASE

    KFS开放能力

    数据转换器

    01

    KFS运行架构

    KFS的主要角色分为源端和目标端,其中源端连接源数据库,通过实时采集数据库的日志信息并解析处理,统一成以KUFL数据存储格式的物理文件。目标端通过网络连接到源端,不断获取由源端产生的KUFL文件,解析以后由目标端连接目标数据库,以遵循事务完整性的原则将数据写入到目标数据库中。而转换器可配置在采集阶段或者应用阶段,以适应不同的数据转换处理场景。

    d010e0d8c14eaeef5380e51d60f98fd5.png

    02

    数据转换器

    KFS的数据转换器主要用于对同步数据的处理,可以对数据进行转换、映射、计算、过滤等操作。KFS支持两种过滤器的扩展方式,第一种为原生Java,第二种为JavaScript脚本。本文主要介绍基于JavaScript脚本的扩展方式。

    KFS目前支持的数据转换器 ●●

    1.replaceStatementFilter,DDL语句替换转换器;

    2.dropcolumnFilter,列过滤转换器;

    3.dataMarkFilter,数据标记转换器;

    4.还有诸如dropStatementData(DDL过滤转换器),replicate(表数据转换器),skipeventbyvalue(值数据转换器)等不同需求环境的转换器。

    数据转换器的出现,可以大大拓宽KFS的使用场景,比如:

    1.使用replaceStatementFilter来进行异构数据库之间DDL语句涉及语法内容的转换;

    2.使用dropcolumnFilter来进行某个表过滤指定列,主要用于过滤数据汇集时一些没有业务需求的列;

    3.使用dataMarkFilter来进行增删改数据的操作标记和操作时间标记,主要用于一些需要对数据变更进行操作记录的场景。

    KFS转换器具体接口及功能

    0866bdab6352a4507dcda0b169fd3a76.png

    KING BASE

    手把手教你

    做一个KFS数据转换器

    使用场景

    在数据汇集的场景,多个源端服务传输的数据中,可能有大部分的数据是冗余或无用的,但是冗余的数据有一定的规律(例如:冗余数据是以0000开头)。如果这些数据也一起同步到了目标端,在目标端数据入库时会挤占正常数据入库所需要的资源。基于这种情况,设计一个转换器插件对这些冗余数据进行处理就很有必要。

    插件设计和示例

    1

    给插件命名

    uselessDataFilter

    2

    设计和开发

    入参

    fe060eae8e6215b9e04b1e668adcb3d2.png

    该参数的设计是基于使用场景中所提到的需求:需要转换具有一定规律的冗余数据。

    代码逻辑

    准备

    08129f142bb587335f9a08a1870f1bcc.png

    此处主要是获取参数的值,该值由用户在配置文件中所定义。

    匹配 

    277fb2613af855e612cb03faf13e4a54.png

    此处的实现主要是基于使用场景中的描述:冗余数据以0000开头,因此对于相关数据的匹配就调用startwith()方法,进行开头数据的匹配。当匹配成功时,就需要将匹配的冗余数据从转换的数据集中删去。

    清理

    该转换器不涉及系统资源的调用,因此不需要释放相关的资源。

    上述逻辑具体需要实现在名为uselessdata.js的文件中,具体实现如下:

    f929b8f854b6d3f6c895c575d7568181.png

    3

    导入KFS

    Js文件导入

    296683aed1e39537af5bef3c15e27971.png

    将编写好的转换器uselessdata.js文件,移动到下述目录中。

    配置文件编写      

    在安装目录的flysync-replicator/samples/conf/filters/default中新建一个  以新增转换器名称小写的以.tpl为后缀的文件。

    de442ce93079e0b148ee3baaf39d01e8.png

    在目标端flysync.ini文件中添加如下参数

    c56362fbc03cc639d6c68e724f93535a.png

    重新安装部署

    进入安装目录中tool下,执行./fspm install

    KING BASE

    效果展示

    测试模型

    硬件环境:

    内存大小:8G

    硬盘大小:180G

    操作系统:CentOs7-x86_64

    表结构展示

    650612252bd738fdeef21cf368bf088a.png

    每张表各插入一万条数据。

    业务模型

    五张业务表中,每张表有三列数据,其中冗余数据随机出现在不同表的不同列中,且冗余数据所占比例为50%。单表数据量为1万条。

    c24197defdc7bbda9cb4f6199782418c.png

    说明

    在此基础上可以增加更多的判断规则及有关的判断功能选择。此处根据场景将转换的匹配功能固定为判断开头的数据是否等于自定义的数据,如果等于就进行转换。除此而外,还可以添加是否包含数据,是否以数据的末尾进行判断,是否等于某些数据等功能,不同功能可以添加额外添加功能选择参数(例如:replicator.filter.uselessdata.type)去控制在匹配数据是所生效的匹配功能。

    KING BASE

    快速实操上手

    上述“保姆级”教程你get到了嘛?那针对以下实验场景快来实操,练练手吧。

    实验场景一

    A客户现在需要将其源数据库中的数据同步到指定的目标数据库中,源数据库中存在一个时间列,A客户仅想同步某个时间段内的数据。

    实验场景二

    B客户需要进行数据汇集,将4个源数据库的数据同步到1个目标数据库中,每个源数据库不定期会产生一些固定的DDL语句,这些语句不用在目标端执行,在同步时需要把这些DDL的信息过滤掉。

    实验场景三

    C客户场景为月度工资分发,需要从总部数据库中将不同子公司员工的薪资信息同步到每个子公司的数据库中,但是总公司所记录的薪资信息会有不同的类型(即多列记录薪资结构),需要将多列的薪资数据进行计算后再同步到子公司数据库中。

    d7b17f1605477ff6194e5d4e4b2f3604.png供稿:产品研发中心

    编辑:王堇

    审核:日尧

    436388aac7c8b111c0e958b9bf296316.gif

  • 相关阅读:
    Android ndk开发入门集锦一
    k8s使用KubeSphere三步集成Harbor
    Mybatis巧用@Many注解一个SQL联合查询语句搞定一对多查询
    点餐小程序实战教程05-用户注册
    设计模式:享元模式
    阳离子脂质DMG-PEG2000;1,2-二肉豆蔻酰-rac-甘油-3-甲氧基聚乙二醇2000
    软件设计不是CRUD(12):低耦合模块设计理论——业务抽象:模块分层操作
    四、网络请求与路由
    贪心算法-点灯问题
    kafka面试连环问,你能撑到哪一问?
  • 原文地址:https://blog.csdn.net/Kingbase_/article/details/133154354