<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                在增量抽取中,如果數據量很大,就只能抽取變化的源數據,即最后一次抽取以來發生了變化的數據。這種數據抽取模式稱為變化數據捕獲,簡稱 **CDC**(change data caputer)。 <br/> CDC 大體分為兩種:<mark>侵入式</mark>和<mark>非侵入式</mark>。 侵入式是指 CDC 操作會給源系統帶來性能影響。只要 CDC 對源庫進行了 SQL 語句操作,就可以認為是侵入式的。常用的 CDC 方法也有以下四種: 1. **基于時間戳的CDC** 時間戳: 要求源數據表里有插入時間和更新時間列, 抽取新增數據時根據插入時間, 抽取修改數據根據更新時間。 ``` select * from t where create_time > last_load_time ``` * 缺點 * 不能識別多次更新的數據, 只能拿到最后一次更新的數據 * 不能記錄觸發有刪除邏輯的記錄 2. **基于觸發器的CDC** 當執行 `insert, update, delete`這些操作的時候可以使用數據庫的觸發器來執行一些動作, 比如觸發器將變更的數據保存到臨時表當中, 然后從臨時表抽取數據到ODS層。 * 缺點: * 觸發器會影響數據庫的性能, 這種方式使用的不多 3. **基于快照的CDC** 如果沒有時間戳, 也不允許使用觸發器, 就可以使用快招標, 每天將MySQL的表都導入到ODS層一次, 每天存成一張新的表, 這樣的話, 我可以追溯到任何一天的歷史數據 * 缺點: * 占用了太多的存儲空間 4. **基于日志的CDC** 最復雜和最沒有入侵的 CDC 方式就是基于日志的方式。數據庫會把每個插入、更新和刪除操作記錄在日志里。只要在數據庫中開啟事務日志,再將日志讀取出來,就可以還原這部分變化數據了。 * 缺點: * 復雜 * 只能用來處理一種特定的數據庫。 例如在 mysql 中,啟用 log_bin 日志,并使用 mysqlbinlog 工具讀取出來,步驟如下: (1)查看是否開啟了二進制日志 ```sql show variables like '%log_bin%'; --結果如下: Variable_name value 1og_bin OFF(默認是關閉的) log_bin_trust_function_oreators OFF sql_log_bin ON ``` (2)如果沒有開啟。 找到 mysql 的配置文件`my.cnf`,一般在/etc,在[mysqld]下面添加 ``` log-bin=/var/log/mysql-bin ``` 然后重啟 mysql 服務。 (3)插入一條測試數據并查看日志信息 ``` INSERT INTO dim_date VALUES (NULL,'2050-01-02',1,'January',1,2050); -- 查看日志 show master status; 或者 SHOW MASTER LOGS; -- 輸出為: Log-name File_size mysql-bin.000001 271 ``` (4)查看日志,在 shell 下執行 ```shell -- 登錄MySQL [root@hadoop101 /]# mysqlbinlog --start-position=0 mysql-bin.000001 | mysql -uroot -p123456 -- 把日志文件輸出到文本文件中 [root@hadoop101 /]# mysqlbinlog –start-date=’2018-11-25’ –end-date=’2018-11-26’mysql-bin.000001 > /tmp/000001.txt ``` 執行文本文件的 sql 語句就可以了。基于日志的 CDC 也有缺陷,即只能用來處理一種特定的數據庫。 <br/> 現在國內用的比較多的插件是 canal [阿里系]。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看