DRDS(PolarDB-X 1.0)資料來源為您提供讀取和寫入DRDS(PolarDB-X 1.0)雙向通道的功能,本文為您介紹DataWorks的DRDS(PolarDB-X 1.0)資料同步的能力支援情況。
支援的版本
即時讀取
支援DRDS(PolarDB-X 1.0)執行個體。建立DRDS(PolarDB-X 1.0)執行個體的操作可參見建立PolarDB-X 1.0執行個體。
使用限制
離線讀寫
目前DRDS(PolarDB-X 1.0)的外掛程式僅適配MySQL引擎的情境。DRDS(PolarDB-X 1.0)是一套分布式MySQL資料庫,並且大部分通訊協定遵守MySQL使用情境。
DRDS(PolarDB-X 1.0)下的MySQL8.0版本支援使用Serverless資源群組(推薦)和獨享Data Integration資源群組。
在底層實現上,DRDS(PolarDB-X 1.0) Writer通過JDBC串連遠程DRDS(PolarDB-X 1.0)資料庫的Proxy,執行相應的
replace into
語句,寫入資料至DRDS(PolarDB-X 1.0)。執行的SQL語句是
replace into
,為避免資料重複寫入,需要您的表具備主鍵(Primary Key)或唯一性索引(Unique index)。DRDS(PolarDB-X 1.0) Writer通過資料同步架構擷取Reader產生的協議資料,通過
replace into
(沒有遇到主鍵/唯一性索引衝突時,與insert into
行為一致,衝突時會用新行替換原有行所有欄位)語句寫入資料至DRDS(PolarDB-X 1.0)。DRDS(PolarDB-X 1.0) Writer累積一定資料,提交給DRDS(PolarDB-X 1.0)的Proxy,該Proxy內部決定資料是寫入一張還是多張表,以及多張表寫入時如何路由資料。說明整個任務至少需要具備
replace into
的許可權。是否需要其它許可權,取決於您配置任務時在preSql和postSql中指定的語句。支援閱讀檢視表。
即時讀
目前僅支援使用執行個體模式配置的資料來源,如果您使用JDBC串連串配置的資料來源,任務運行將會出錯。
執行個體的儲存類型:僅支援PolarDB(即租戶側PolarDB MySQL)和存量的使用者RDS(新購已不支援),不支援RDS MySQL(即私人定製RDS MySQL)。
不支援XA ROLLBACK。
針對已經XA PREPARE的交易資料,即時同步會將其同步到目標端,如果XA ROLLBACK,即時同步不會針對XA PREPARE的資料做復原寫入的操作。若要處理XA ROLLBACK情境,需要手動將XA ROLLBACK的表從即時同步任務中移除,再添加表後重新進行同步。
支援的欄位類型
DRDS(PolarDB-X 1.0) Reader和DRDS(PolarDB-X 1.0) Writer支援大部分DRDS(PolarDB-X 1.0)類型,但也存在個別類型沒有支援的情況,請注意檢查您的資料類型。
DRDS(PolarDB-X 1.0) Reader和DRDS(PolarDB-X 1.0) Writer針對DRDS(PolarDB-X 1.0)類型的轉換列表,如下所示。
類型分類 | DRDS(PolarDB-X 1.0)資料類型 |
整數類 | INT、TINYINT、SMALLINT、MEDIUMINT和BIGINT |
浮點類 | FLOAT、DOUBLE和DECIMAL |
字串類 | VARCHAR、CHAR、TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT |
日期時間類 | DATE、DATETIME、TIMESTAMP、TIME和YEAR |
布爾類 | BIT和BOOL |
二進位類 | TINYBLOB、MEDIUMBLOB、BLOB、LONGBLOB和VARBINARY |
資料同步前準備
您需要規劃一個資料庫的登入賬戶用於後續執行操作,此帳號需要擁有DRDS(PolarDB-X 1.0)的相關操作許可權,詳情請參見建立帳號。
建立資料來源
在進行資料同步任務開發時,您需要在DataWorks上建立一個對應的資料來源,操作流程請參見建立並管理資料來源,詳細的配置參數解釋可在配置介面查看對應參數的文案提示。
資料同步任務開發
資料同步任務的配置入口和通用配置流程可參見下文的配置指導。
單表離線同步任務配置指導
操作流程請參見通過嚮導模式配置離線同步任務、通過指令碼模式配置離線同步任務。
指令碼模式配置的全量參數和指令碼Demo請參見下文的附錄:指令碼Demo與參數說明。
整庫離線讀、單表/整庫全增量即時讀同步配置指導
操作流程請參見Data Integration側同步任務配置。
常見問題
一致性視圖問題
DRDS(PolarDB-X 1.0)本身屬於分散式資料庫,對外無法提供一致性的多庫多表視圖。不同於MySQL等單庫單表同步,DRDS(PolarDB-X 1.0) Reader無法抽取同一個時間切片的分庫分錶快照資訊,即DRDS(PolarDB-X 1.0) Reader抽取底層不同的分表將擷取不同的分錶快照,無法保證強一致性。
資料庫編碼問題
DRDS(PolarDB-X 1.0)本身的編碼設定非常靈活,包括指定編碼到庫、表、欄位層級,甚至可以設定不同編碼。優先順序從高到低為欄位、表、庫、執行個體。建議您在庫層級將編碼統一設定為UTF-8。
DRDS(PolarDB-X 1.0) Reader底層使用JDBC進行資料幫浦,JDBC天然適配各類編碼,並在底層進行了編碼轉換。因此DRDS(PolarDB-X 1.0) Reader不需要您指定編碼,可以自動擷取編碼並轉碼。
對於DRDS(PolarDB-X 1.0)底層寫入編碼和其設定的編碼不一致的混亂情況,DRDS(PolarDB-X 1.0) Reader對此無法識別,該類情況的同步結果有可能為亂碼。
增量資料同步的方式
DRDS(PolarDB-X 1.0) Reader使用JDBC SELECT陳述式完成資料幫浦工作,因此您可以使用
SELECT…WHERE…
進行增量資料幫浦,方式如下:資料庫線上應用寫入資料庫時,填充modify欄位為更改時間戳記,包括新增、更新、刪除(邏輯刪除)。對於這類應用,DRDS(PolarDB-X 1.0) Reader只需要where條件後跟上一同步階段時間戳記即可。
對於新增流水型資料,DRDS(PolarDB-X 1.0) Reader在where條件後跟上一階段最大自增ID即可。
對於業務上無欄位區分新增、修改資料的情況,DRDS(PolarDB-X 1.0) Reader無法進行增量資料同步,只能同步全量資料。
不支援在where語句中配置物理表相關的篩選條件。
附錄:指令碼Demo與參數說明
離線任務指令碼配置方式
如果您配置離線任務時使用指令碼模式的方式進行配置,您需要按照統一的指令碼格式要求,在任務指令碼中編寫相應的參數,詳情請參見通過指令碼模式配置離線同步任務,以下為您介紹指令碼模式下資料來源的參數配置詳情。