<kbd id="9plqc"><label id="9plqc"></label></kbd>

        <th id="9plqc"></th>
        1. <center id="9plqc"><video id="9plqc"></video></center>
          <sub id="9plqc"><form id="9plqc"><pre id="9plqc"></pre></form></sub>
          <nav id="9plqc"><form id="9plqc"><legend id="9plqc"></legend></form></nav>
          自己寫的跨數(shù)據(jù)庫的表同步工具 您所在的位置:網(wǎng)站首頁 屬雞明日運勢最準 自己寫的跨數(shù)據(jù)庫的表同步工具

          自己寫的跨數(shù)據(jù)庫的表同步工具

          2023-09-17 16:36| 來源: 網(wǎng)絡整理| 查看: 265

          閱讀本文大概需要 3.6 分鐘。

          近期在做數(shù)據(jù)集市,遇到的痛點如下:

          1、數(shù)據(jù)采集過程繁瑣,重復的腳本編寫太多。從不同的數(shù)據(jù)庫抽取數(shù)據(jù),需要為不同的數(shù)據(jù)庫寫卸數(shù)腳本,再傳輸?shù)綌?shù)據(jù)集市文件服務器,再入庫,每一環(huán)節(jié)都需要調(diào)度。

          2、不同的數(shù)據(jù)庫寫不同的 shell 腳本,沒法復用,開發(fā)效率低。

          于是我寫了這個數(shù)據(jù)庫同步工具,如果你是做數(shù)據(jù)倉庫或數(shù)據(jù)集市的,可能對你有所幫助。

          為什么我使用 Java 不使用 Python,因為服務器都已經(jīng)有了 Java,但沒有 Python,安裝 Python 需要編譯,就需要 root 權(quán)限,這就需要運維幫忙,還需要有正當?shù)睦碛桑胂胩闊┚褪褂?Java 吧。我想說的是,百萬級別的數(shù)據(jù)抽取,Java 雖然快了幾秒,但寫 Java 耗費了我不少業(yè)余時間,Python 開發(fā)肯定更節(jié)省自己的時間。

          你也許會說 Python 也有免安裝的版本,是的,雖然解決了 Python 解釋器的編譯安裝問題,但部分三方庫仍然需要編譯,這就可能遇到缺失 so 文件,dll 文件,在沒有網(wǎng)絡的環(huán)境下,十分麻煩。有網(wǎng)絡的情況下,這都不是問題,Python 依然是我最常用的編程語言。

          程序介紹

          java 程序編寫,真正跨平臺。本程序的最大用處就是構(gòu)建集市或數(shù)倉所需要的基礎(chǔ)層數(shù)據(jù)源。

          簡單的傳入一定的參數(shù),即可跨數(shù)據(jù)庫實現(xiàn)以下功能:

          兩個表之間數(shù)據(jù)的同步,可以增量或全量更新。兩個表表結(jié)構(gòu)的同步,包括自動建表,原表擴字段長度或增加字段,目標表也做相同動作。支持指定原表或目標表的字段序列,更靈活。默認按目標表的字段序列查詢原表的字段序列。支持視圖到表的數(shù)據(jù)抽取。日志記錄、插入記錄數(shù)統(tǒng)計、耗時統(tǒng)計。

          結(jié)合調(diào)度工具,您可以輕松搭建一個數(shù)據(jù)倉庫或集市。

          目前項目已經(jīng)投入生產(chǎn)使用 ,歡迎感興趣的朋友一起加入。

          程序的使用方法

          數(shù)據(jù)庫的信息寫在配置文件中,計劃支持各種主流關(guān)系型數(shù)據(jù)庫,如 MysqL、Db2、Oracle、PostgreSQL。

          程序運行前確保已安裝 java 1.8 或后續(xù)版本,已經(jīng)安裝 maven,如果沒有請安裝一下,網(wǎng)上到處都是安裝教程。然后 clone 源碼,打包:

          git clone https://gitee.com/somenzz/database-sync.git cd database-sync mvn package cd target java -jar database-sync-1.1.jar

          程序名稱叫 database-sync,運行方式是這樣的:

          (py37env) ? target git:(master) ? java -jar database-sync-1.1.jar Usage: java -jar database-sync-1.0.jar [options] {fromDB} {fromSchema} {fromTable} {toDB} {toSchema} {toTable} [whereClause] options: --version or -v :print version then exit --help or -h :print help info then exit --simple or -s :use insert into table A select * from B mode, ignore table's structure --from_fields={col1,col2} or -ff={col3,col4} :specify from fields --to_fields={col1,col2} or -tf={col3,col4} :specify to fields

          幫助說明:

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

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

          --simple 或者 -s : 簡單模式,此時只進行數(shù)據(jù)傳輸,不進行表構(gòu)的同步。

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

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

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

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

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

          { "postgres":{ "type":"postgres", "driver":"org.postgresql.Driver", "url":"jdbc:postgresql://localhost:5432/apidb", "user": "postgres", "password":"aaron" }, "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ù)表的表名,必須提供,當寫入表不存在時,自動按讀取表的表結(jié)構(gòu)創(chuàng)建,可以和 fromTable 不同。配置文件說明

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

          { "sjwb":{ "type":"db2", "driver":"com.ibm.db2.jcc.DB2Driver", "url":"jdbc:db2://192.168.1.*:50000/wbsj", "user": "****", "password":"****", "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":"****", "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 }

          配置文件說明:

          buffer-rows 表示讀取多少行時一塊寫入目標數(shù)據(jù)庫,根據(jù)服務器內(nèi)存大小自己做調(diào)整,100000 行提交一次滿足大多數(shù)情況了。 encoding 用于表結(jié)構(gòu)同步,相同的字段,utf-8 庫的字符串長度應該是 gbk 庫字符串長度的 2 倍,這樣才可以解決字符串含有中文的問題,為什么是 2 倍?為了字符串的長度不會出現(xiàn)小數(shù)位。

          編寫目的

          提高數(shù)據(jù)庫間表的同步效率,如果是輕加工,就丟掉低效的 datastage 和 kettle 吧。

          獲取源代碼

          關(guān)注「Python七號」后臺回復「同步」獲取源碼。



          【本文地址】

          公司簡介

          聯(lián)系我們

          今日新聞

          推薦新聞

          專題文章
            CopyRight 2018-2019 實驗室設備網(wǎng) 版權(quán)所有
            黄色免费网站在线看,韩国精品在线观看,韩国美女一区二区,99国产热 佛冈县| 博爱县| 竹山县| 江油市| 博罗县| 西林县| 朝阳区| 香河县| 开江县| 乐清市| 兴化市| 温宿县| 临沧市| 石城县| 元阳县| 稻城县| 白银市| 襄汾县| 福建省| 获嘉县| 乐昌市| 泸溪县| 泸州市| 西峡县| 辽宁省| 黄大仙区| 白河县| 改则县| 乐陵市| 时尚| 西林县| 应用必备| 宣威市| 鄂托克前旗| 绍兴县| 苍山县| 双牌县| 洛隆县| 井陉县| 南汇区| 卫辉市| http://444 http://444 http://444 http://444 http://444 http://444