go语言写的简要数据同步工具详解

 更新时间:2024年07月22日 09:01:35   作者:Breeze0806  
作为go-etl工具的作者,想要安利一下这个小巧的数据同步工具,它在同步百万级别的数据时表现极为优异,基本能在几分钟完成数据同步,这篇文章主要介绍了go语言写的简要数据同步工具,需要的朋友可以参考下

go语言写的简要数据同步工具

go-etl工具

作为go-etl工具的作者,想要安利一下这个小巧的数据同步工具,它在同步百万级别的数据时表现极为优异,基本能在几分钟完成数据同步。

1.它能干什么的?

go-etl是一个数据同步工具集,目前支持MySQL,postgres,oracle,SQL SERVER,DB2等主流关系型数据库以及csv,xlsx文件之间的数据同步,在同步百万级别的数据时表现极为优异,基本能在几分钟完成数据同步。

2.怎么获取它?

可以在最新发布版本下载到windows或者linux操作系统的64位版本二进制程序

如图所示第1个是不包含db2功能的linux二进制程序,第2个是linux版本的,第3个是windows版本的

3.怎么使用它?

go-etl datax二进制程序是一款即插即用的程序,它的唯一难点是配置导入配置文件,配置它的配置文件我们需要理解它的工作原理

3.1 工作原理

如上图所示go-etl datax将数据从源数据源同步到目的数据源,

  • 读取器:reader为数据采集模块,负责采集数据源的数据,将数据发送给框架。

  • 写入器:writer为数据写入模块,负责不断向框架取数据,并将数据写入到目的端。

  • 框架:框架用于连接readerwriter,作为两者的数据传输通道,并处理缓冲,流控,并发,数据转换等核心技术问题

3.2 配置数据同步文件

通过工作原理,需要配置readerwriter才能使go-etl datax准确地开始工作,本次以csvmysql之间的数据同步为例, 以下是完整的配置文件,但仅需要关注job.content即可

{
    "core" : {
        "container": {
            "job":{
                "id": 1,
                "sleepInterval":100
            }
        }
    },
    "job":{
        "content":[
            {
                "reader":{
                    "name": "csvreader",
                    "parameter": {
                        "path":["split.csv"],
                        "encoding":"utf-8"
                    }
                },
                "writer":{
                    "name": "mysqlwriter",
                    "parameter": {
                        "username": "root",
                        "password": "123456",
                        "writeMode": "insert",
                        "column": ["*"],
                        "connection":  {
                                "url": "tcp(192.168.15.130:3306)/mysql",
                                "table": {
                                    "db":"source",
                                    "name":"split"
                                }
                         },
                        "batchTimeout": "1s",
                        "batchSize":1000
                    }
                },
               "transformer":[]
            }
        ],
        "setting":{
            "speed":{
                "byte":0,
                "record":1024,
                "channel":4
            }
        }
    }
}

这里先看reader,首先留意到的时reader的名字是csvreader,表明其源数据源的类型,再例如如mysql的读取器为mysqlreader,接着留意到的时reader的参数,path代表csv文件的存储位置,encoding为csv文件的字符集。

这里再看writer,首先留意到的时reader的名字是mysqlreader,表明其目的数据源的类型,再例如csv的读取器为mysqlreader,接着留意到的时writer的参数,需要配置的是username,password,connectionurltable,用户名密码无需多言,这里要重点讲讲url,基本配置格式:tcp(ip:port)/db,ip:port代表mysql数据库的IP地址和端口,db表示要默认连接的数据库,table是需要写入的表信息。

3.3 运行程序导入数据

将上述配置命名为config.json,将其和datax以及待导入的数据文件split.csv放到同一目录下,在windows中使用命令行或者linux中使用终端执行以下命令

datax

3.4 批量写入数据

3.4.1 源目的配置向导文件

源目的配置向导文件是csv文件,每行配置可以配置如下:

path[table],path[table]

每一列可以是路径或者是表名,注意所有的表要配置库名或者模式名,需要在数据源配置文件配置。

3.4.2 批量生成数据配置集和执行脚本

在windows中使用命令行或者linux中使用终端执行以下命令

datax -c tools/testData/xlsx.json -w tools/testData/wizard.csv 

-c 指定数据源配置文件 -w 指定源目的配置向导文件。

执行结果会在数据源配置文件目录文件生成源目的配置向导文件行数的配置集,分别以指定数据源配置文件1.json,指定数据源配置文件2.json,...,指定数据源配置文件[n].json的配置集。

另外,在当前目录会生成执行脚本run.bat或者run.sh。

3.4.3 运行脚本

windows中使用命令行即可

run.bat

linux中使用终端执行即可

run.sh

到此这篇关于go语言写的简要数据同步工具的文章就介绍到这了,更多相关go语言写的简要数据同步工具内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • golang为什么要统一错误处理

    golang为什么要统一错误处理

    这篇文章主要介绍了golang为什么要统一错误处理,统一错误处理的目的是为了前端开发接收到后端的statuscode,之后便于前端逻辑上开发以及开发,下文具体操作过程需要的小伙伴可以参考一下
    2022-04-04
  • Go语言封装HTTP请求的Curl工具包详解

    Go语言封装HTTP请求的Curl工具包详解

    在 Go 语言开发中,与 HTTP 服务进行交互是非常常见的需求,本文将分享一个用 Go 语言封装的 Curl 工具包,它提供了简洁易用的接口来进行 HTTP 请求,需要的可以了解下
    2025-03-03
  • Go语言函数学习教程

    Go语言函数学习教程

    这篇文章主要介绍了Go语言函数基本用法,结合实例形式分析了Go语言函数的格式、定义、使用方法与相关注意事项,需要的朋友可以参考下
    2016-07-07
  • Golang基于文件魔数判断文件类型的案例代码

    Golang基于文件魔数判断文件类型的案例代码

    这篇文章主要介绍了Golang基于文件魔数判断文件类型,本文介绍了基于文件魔数判断文件类型的方法,主要涉及如何ReadSeek读取文件指定字节内容,然后介绍文件魔数,最后给出示例基于魔数判断文件类型,需要的朋友可以参考下
    2023-02-02
  • 详解Golang中NewTimer计时器的底层实现原理

    详解Golang中NewTimer计时器的底层实现原理

    本文将主要介绍一下Go语言中的NewTimer,首先展示基于NewTimer创建的定时器来实现超时控制。接着通过一系列问题的跟进,展示了NewTimer的底层实现原理,需要的可以参考一下
    2023-05-05
  • Go使用context控制协程取消的实战案例

    Go使用context控制协程取消的实战案例

    在并发编程中,合理地控制协程的生命周期是保证程序稳定性和资源可控使用的关键,Go语言标准库中的context包正是为了解决这一问题而生,它为我们提供了取消信号、超时控制、请求作用域的值传递等功能,本文将通过一个实际案例,演示如何使用context控制协程的取消
    2025-08-08
  • Go语言中调用外部命令的方法总结

    Go语言中调用外部命令的方法总结

    在工作中,我们时不时地会需要在Go中调用外部命令。本文为大家总结了Go语言中调用外部命令的几种姿势,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-11-11
  • Go语言实现读取文件的方式总结

    Go语言实现读取文件的方式总结

    这篇文章主要为大家详细介绍了Go语言实现读取文件的几个方式,文中的示例代码讲解详细,对我们学习Go语言有一定的帮助,感兴趣的小伙伴可以收藏一下
    2023-04-04
  • go实现冒泡排序的示例代码

    go实现冒泡排序的示例代码

    这篇文章主要介绍了go实现冒泡排序的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Go语言中的内存布局详解

    Go语言中的内存布局详解

    这篇文章主要给大家介绍了Go语言中的内存布局,那么本文中将尝试解释Go如何在内存中构建结构体,以及结构体在字节和比特位方面是什么样子。 有需要的朋友们可以参考借鉴,感兴趣的朋友们下面来跟着小编一起学习学习吧。
    2016-11-11

最新评论