最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java數(shù)據(jù)開發(fā)輔助工具Docker與普通程序使用方法

 更新時(shí)間:2021年09月14日 17:30:19   作者:somenzz  
這是為數(shù)據(jù)開發(fā)人員使用的輔助工具,用于數(shù)據(jù)庫(kù)之間的表同步,說(shuō)同步并不嚴(yán)謹(jǐn),因?yàn)椴皇菍?shí)時(shí)更新的,更確切的說(shuō)法是復(fù)制,可以方便的從一個(gè)數(shù)據(jù)庫(kù)復(fù)制表到另一個(gè)數(shù)據(jù)庫(kù),以下遇到同步的詞請(qǐng)理解為復(fù)制

介紹

需求背景

有很多業(yè)務(wù)系統(tǒng),他們的數(shù)據(jù)庫(kù)是相互獨(dú)立的,俗稱數(shù)據(jù)孤島,為了做數(shù)據(jù)統(tǒng)計(jì)分析,就需要把這些數(shù)據(jù)歸集在一個(gè)數(shù)據(jù)庫(kù)中,比如數(shù)據(jù)倉(cāng)庫(kù),然后多表關(guān)聯(lián)查詢,方便開發(fā)數(shù)據(jù)應(yīng)用。希望能有這樣的工具,指定兩個(gè)數(shù)據(jù)庫(kù)和表名,就可以將表從源數(shù)據(jù)庫(kù)拷貝到目標(biāo)數(shù)據(jù)庫(kù)中。具體需求如下:

  • 能自動(dòng)同步表結(jié)構(gòu),如:源表加字段,目標(biāo)表自動(dòng)加字段。
  • 支持增量或全量復(fù)制數(shù)據(jù),比如按日期進(jìn)行復(fù)制數(shù)據(jù)。
  • 支持指定字段同步,只同步關(guān)心的那些字段。
  • 支持主流的關(guān)系型數(shù)據(jù)庫(kù): mysql、db2、postgresql、oracle、sqlserver
  • 源表和目標(biāo)表表名可以不同,字段名也可以不同(已存在目標(biāo)表的情況下)

因?yàn)樽约阂?,我就自己寫了一個(gè),順便熟悉下 java 開發(fā)(之前一直用 Python,不得不說(shuō),Java 真浪費(fèi)時(shí)間),本程序的最大用處就是構(gòu)建集市或數(shù)倉(cāng)所需要的基礎(chǔ)層數(shù)據(jù)源,歡迎感興趣的朋友一起加入。

程序的使用方法

Docker 方式

這里用到三個(gè)容器:

  • app 也就是主程序本身,app 容器使用的程序文件就是 release 目錄下的文件,已經(jīng)做了綁定。
  • mysql 測(cè)試用的,作為源數(shù)據(jù)庫(kù),已提前放好了有 7000 條測(cè)試數(shù)據(jù)的表 somenzz_users。
  • postgres 測(cè)試用的,作為目標(biāo)數(shù)據(jù)庫(kù),沒有數(shù)據(jù)。

先部署,執(zhí)行 docker-compose up -d 就會(huì)自動(dòng)完成應(yīng)用和數(shù)據(jù)庫(kù)的部署:

$ git clone https://github.com/somenzz/database-sync.git
$ cd database-sync
$ docker-compose up -d
Creating database-sync_postgres_1 ... done
Creating database-sync_app_1      ... done
Creating database-sync_mysql_1    ... done

這樣三個(gè)容器就啟動(dòng)了,使用 docker ps -a |grep database-sync 可以查看到三個(gè)正在運(yùn)行的容器:

現(xiàn)在直接使用 docker exec -i database-sync_app_1 java -jar database-sync-1.3.jar 來(lái)執(zhí)行程序:

mysql 容器已有測(cè)試數(shù)據(jù),release/config/config.json 已經(jīng)配置好了數(shù)據(jù)庫(kù)的連接,因此可以直接試用,以下演示的是從 mysql 復(fù)制表和數(shù)據(jù)到 postgres:

1. 全量復(fù)制,自動(dòng)建表:

docker exec -i database-sync_app_1 java -jar database-sync-1.3.jar mysql_test testdb somenzz_users postgres_test public users --sync-ddl

如果你不想每次都敲 docker exec -i database-sync_app_1 ,可以進(jìn)入容器內(nèi)部執(zhí)行:

(py38env) ➜  database-sync git:(master) ✗ docker exec -it database-sync_app_1 /bin/bash
root@063b1dc76fe1:/app# ls
config database-sync-1.3.jar  lib  logs
root@063b1dc76fe1:/app# java -jar database-sync-1.3.jar mysql_test testdb somenzz_users postgres_test public users -sd

2. 增量復(fù)制:

root@063b1dc76fe1:/app# java -jar database-sync-1.3.jar mysql_test testdb somenzz_users postgres_test public zz_users "create_at >= '2018-01-09'"

3. 指定字段:

root@063b1dc76fe1:/app# java -jar database-sync-1.3.jar mysql_test testdb somenzz_users postgres_test public zz_users -ff="user_id,name,age" -tf="user_id,name,age" "create_at >= '2018-01-09'"

普通方式

程序運(yùn)行前確保已安裝 java 1.8 或后續(xù)版本,已經(jīng)安裝 maven,然后 clone 源碼,打包:

git clone https://gitee.com/somenzz/database-sync.git
cd database-sync
mvn package

此時(shí)你會(huì)看到 target 目錄,將 target 下的 lib 目錄 和 database-sync-1.3.jar 復(fù)制出來(lái),放在同一目錄下,然后再創(chuàng)建一個(gè) config 目錄,在 config 下新建一個(gè) config.json 文件寫入配置信息,然后將這個(gè)目錄壓縮,就可以傳到服務(wù)器運(yùn)行了,請(qǐng)注意先充分測(cè)試,jdk 要求 1.8+

[aaron@hdp002 /home/aaron/App/Java/database-sync]$ ls -ltr
total 48
drwxr-xr-x 2 aaron aaron  4096 Apr 23  2020 lib
-rwxrw-r-- 1 aaron aaron   157 Jun 23  2020 run.sh
drwxrwxr-x 2 aaron aaron  4096 Jul  3  2020 logs
-rw-rw-r-- 1 aaron aaron 24773 Mar 16  2021 database-sync-1.3.jar
drwxr-xr-x 7 aaron aaron  4096 Aug  3  2020 jdk1.8.0_231
drwxrwxr-x 2 aaron aaron  4096 Feb 19 17:07 config

你也可以直接下載我打包好的使用。

程序名稱叫 database-sync,運(yùn)行方式是這樣的:

(py38env) ➜  target git:(master) ✗ java -jar database-sync-1.3.jar -h      
Usage: 
java -jar database-sync-1.0.jar [options] {fromDB} {fromSchema} {fromTable} {toDB} {toSchema} {toTable} [whereClause]
options:
        -v or --version                            :print version then exit
        -h or --help                               :print help info then exit
        -sd or --sync-ddl                          :auto synchronize table structure
        -ff=col1,col2 or --from-fields=col1,col2   :specify from fields
        -tf=col3,col4 or --to-fields=col3,col4     :specify to fields
        --no-feature or -nf                        :will not use database's feature

幫助說(shuō)明:

[] 中括號(hào)里的內(nèi)容表示選填,例如 [options] 表示 options 下的參數(shù)不是必須的。

1、其中 options 參數(shù)解釋如下:

--sync-ddl 或者 -sd : 加入該參數(shù)會(huì)自動(dòng)同步表結(jié)構(gòu)。

--from_fields=col1,col2 或者 -ff=col1,col2 : 指定原表的字段序列,注意 = 前后不能有空格。

--to_fields=col3,col4 或者 -tf=col3,col4 : 指定目標(biāo)表的字段序列,注意 = 前后不能有空格。

2、whereClause 表示 where 條件,用于增量更新,程序再插入數(shù)據(jù)前先按照 where 條件進(jìn)行清理數(shù)據(jù),然后按照 where 條件從原表進(jìn)行讀取數(shù)據(jù)。whereClause 最好使用雙引號(hào)包起來(lái),表示一個(gè)完整的參數(shù)。如:"jyrq='2020-12-31'"

{} 大括號(hào)里的內(nèi)容表示必填。

fromDb 是指配置在 config.json 的數(shù)據(jù)庫(kù)信息的鍵,假如有以下配置文件:

{
      "postgres":{
        "type":"postgres",
        "driver":"org.postgresql.Driver",
        "url":"jdbc:postgresql://localhost:5432/apidb",
        "user": "postgres",
        "password":"aaron",
        "encoding": "utf-8"
    }, 
    "aarondb":{
        "type":"mysql",
        "driver":"com.mysql.cj.jdbc.Driver",
        "url":"jdbc:mysql://localhost:3306/aarondb?useSSL=false&characterEncoding=utf8&serverTimezone=UTC",
        "user": "aaron",
        "password":"aaron"
    }
}

fromDb、toDb 可以是 aarondb 或者 postgres。

fromSchema 讀取數(shù)據(jù)的表的模式名,可以填寫 "".

fromTable 讀取數(shù)據(jù)的表明,必須提供。

toSchema 寫入數(shù)據(jù)表的模式名,可以填寫 "",可以和 fromSchema 不同.

toTable 寫入數(shù)據(jù)表的表名,必須提供,當(dāng)寫入表不存在時(shí),自動(dòng)按讀取表的表結(jié)構(gòu)創(chuàng)建,可以和 fromTable 不同。

全量、增量、指定字段的使用樣例請(qǐng)參考 Docker 方式。

配置文件說(shuō)明

配置文件位于 config/config.json,如下所示:

 
{
    "sjwb":{
        "type":"db2",
        "driver":"com.ibm.db2.jcc.DB2Driver",
        "url":"jdbc:db2://192.168.1.*:50000/wbsj",
        "user": "****",
        "password":"****",
        "tbspace_ddl": "/*這里可以放置指定表空間的語(yǔ)句*/",
        "encoding":"utf-8"
    },
     "dw_test":{
        "type":"db2",
        "driver":"com.ibm.db2.jcc.DB2Driver",
        "url":"jdbc:db2://192.168.169.*:60990/dwdb",
        "user": "****",
        "password":"****",
        "encoding":"gbk"
    },
     "postgres":{
        "type":"postgres",
        "driver":"org.postgresql.Driver",
        "url":"jdbc:postgresql://10.99.**.**:5432/apidb",
        "user": "****",
        "password":"****",
        "tbspace_ddl": "WITH (compression=no, orientation=orc, version=0.12)\ntablespace hdfs\n",
        "encoding":"utf-8"
    }, 
    "aarondb":{
        "type":"mysql",
        "driver":"com.mysql.cj.jdbc.Driver",
        "url":"jdbc:mysql://localhost:3306/aarondb?useSSL=false&characterEncoding=utf8&serverTimezone=UTC",
        "user": "****",
        "password":"****",
        "encoding":"utf-8"
    },
     "buffer-rows": 100000
}
 

配置文件說(shuō)明:

type  表示數(shù)據(jù)庫(kù)類型,均為小寫:

  • mysql
  • postgres
  • db2
  • oracle
  • sqlserver

tbspace_ddl 表示自動(dòng)建表時(shí)指定的表空間,該選項(xiàng)不是必需的,可以刪除。

buffer-rows 表示讀取多少行時(shí)一塊寫入目標(biāo)數(shù)據(jù)庫(kù),根據(jù)服務(wù)器內(nèi)存大小自己做調(diào)整,100000 行提交一次滿足大多數(shù)情況了。

encoding 用于表結(jié)構(gòu)同步時(shí)確定字段長(zhǎng)度,比如說(shuō)源庫(kù)的字段是 gbk varchar(10),目標(biāo)庫(kù)是 utf-8,那么就應(yīng)該為 varchar(15),這樣字段有中文就不會(huì)出現(xiàn)截?cái)嗷虿迦胧?wèn)題,程序這里 2 倍,也就是 varchar(20) ,這樣字段長(zhǎng)度不會(huì)出現(xiàn)小數(shù)位。

最后的話

提高數(shù)據(jù)庫(kù)間表的復(fù)制效率,如果不需要對(duì)源表字段進(jìn)行轉(zhuǎn)換,就丟掉低效的 datastage 和 kettle 吧。

以上就是Java數(shù)據(jù)開發(fā)輔助工具Docker與普通程序使用方法的詳細(xì)內(nèi)容,更多關(guān)于Java數(shù)據(jù)開發(fā)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java自定義Enum的實(shí)現(xiàn)示例

    Java自定義Enum的實(shí)現(xiàn)示例

    Java中的自定義Enum類型是一種特殊的類,用于表示固定數(shù)量的常量值,本文主要介紹了Java自定義Enum的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • Springboot實(shí)現(xiàn)郵件發(fā)送功能

    Springboot實(shí)現(xiàn)郵件發(fā)送功能

    這篇文章主要為大家詳細(xì)介紹了Springboot實(shí)現(xiàn)郵件發(fā)送功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • Java實(shí)現(xiàn)訂單超時(shí)自動(dòng)取消的7種方案

    Java實(shí)現(xiàn)訂單超時(shí)自動(dòng)取消的7種方案

    在電商、外賣、票務(wù)等系統(tǒng)中,訂單超時(shí)未支付自動(dòng)取消是一個(gè)常見的需求,這個(gè)功能乍一看很簡(jiǎn)單,甚至很多初學(xué)者會(huì)覺得:"不就是加個(gè)定時(shí)器么?" 但真到了實(shí)際工作中,細(xì)節(jié)的復(fù)雜程度往往會(huì)超乎預(yù)期,本文給大家介紹了Java實(shí)現(xiàn)訂單超時(shí)自動(dòng)取消的7種方案
    2024-12-12
  • MapStruct @Mapping注解之處理映射中的Null值方式

    MapStruct @Mapping注解之處理映射中的Null值方式

    這篇文章主要介紹了MapStruct @Mapping注解之處理映射中的Null值方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • java通過(guò)cglib動(dòng)態(tài)生成實(shí)體bean的操作

    java通過(guò)cglib動(dòng)態(tài)生成實(shí)體bean的操作

    這篇文章主要介紹了java通過(guò)cglib動(dòng)態(tài)生成實(shí)體bean的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • Spring?EnableAsync注解異步執(zhí)行源碼解析

    Spring?EnableAsync注解異步執(zhí)行源碼解析

    這篇文章主要為大家介紹了Spring?EnableAsync注解源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • SpringBoot之Banner的使用示例

    SpringBoot之Banner的使用示例

    本篇文章主要介紹了SpringBoot之Banner的使用示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • idea打開運(yùn)行配置java?web項(xiàng)目的全過(guò)程

    idea打開運(yùn)行配置java?web項(xiàng)目的全過(guò)程

    這篇文章主要給大家介紹了關(guān)于idea打開運(yùn)行配置java?web項(xiàng)目的相關(guān)資料,有些時(shí)候我們用IDEA跑之前用eclipse中運(yùn)行的項(xiàng)目的時(shí)候,總是不止所措,要不就是只展示html,要不就是不能部署成功,需要的朋友可以參考下
    2023-08-08
  • Java實(shí)現(xiàn)向Word文檔添加文檔屬性

    Java實(shí)現(xiàn)向Word文檔添加文檔屬性

    這篇文章主要介紹了Java實(shí)現(xiàn)向Word文檔添加文檔屬性的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • java 最新Xss攻擊與防護(hù)(全方位360°詳解)

    java 最新Xss攻擊與防護(hù)(全方位360°詳解)

    這篇文章主要介紹了java 最新Xss攻擊與防護(hù)(全方位360°詳解),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01

最新評(píng)論

读书| 织金县| 黄石市| 密云县| 鲁甸县| 长海县| 尉氏县| 略阳县| 图们市| 临沧市| 泰和县| 望城县| 新宁县| 买车| 皋兰县| 莱西市| 长沙县| 鄄城县| 景宁| 米脂县| 吉首市| 太保市| 长汀县| 沽源县| 信丰县| 于都县| 东明县| 皋兰县| 阿图什市| 伊吾县| 庄河市| 云梦县| 应用必备| 靖边县| 泽库县| 万荣县| 垦利县| 互助| 新巴尔虎左旗| 荥经县| 灌阳县|