番外2: go語言寫的簡要資料同步工具

Breeze0806發表於2024-07-21

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

相關文章