DRDS (PolarDB-X 1.0) データソースを使用すると、DRDS (PolarDB-X 1.0) からのデータの読み取りと書き込みが可能になります。このトピックでは、このデータソースに対する DataWorks のデータ同期機能について説明します。
制限事項
オフライン読み書き
DRDS (PolarDB-X 1.0) プラグインは、MySQL エンジンとのみ互換性があります。DRDS (PolarDB-X 1.0) は分散 MySQL データベースであり、その通信プロトコルのほとんどは MySQL の標準に準拠しています。
DRDS (PolarDB-X 1.0) の MySQL 8.0 は、Serverless リソースグループ (推奨) および データ統合専用リソースグループ をサポートしています。
内部的に、DRDS (PolarDB-X 1.0) Writer は Java Database Connectivity (JDBC) を介してリモートの DRDS (PolarDB-X 1.0) データベースのプロキシに接続し、
replace into文を実行して DRDS (PolarDB-X 1.0) にデータを書き込みます。実行される SQL 文は
replace intoであるため、重複したデータの書き込みを防ぐには、テーブルにプライマリキーまたは一意なインデックスが必要です。DRDS (PolarDB-X 1.0) Writer は、データ同期フレームワークを介して Reader からプロトコルデータを取得します。その後、
replace into文を使用して DRDS (PolarDB-X 1.0) にデータを書き込みます。プライマリキーまたは一意なインデックスの競合が発生しない場合、その動作はinsert intoと同じです。競合が発生した場合、新しい行は既存の行のすべてのフィールドを置き換えます。DRDS (PolarDB-X 1.0) Writer はデータを蓄積し、DRDS (PolarDB-X 1.0) プロキシにコミットします。その後、プロキシはデータを 1 つ以上のテーブルに書き込むかどうか、および複数のテーブルに書き込む際のデータのルーティング方法を決定します。説明タスクには、少なくとも
replace into権限が必要です。他の権限が必要かどうかは、タスクを設定する際に preSql および postSql で指定する文によって異なります。ビューからの読み取りがサポートされています。
サポートされるフィールドタイプ
DRDS (PolarDB-X 1.0) Reader と Writer は、ほとんどの DRDS (PolarDB-X 1.0) のデータの型をサポートしていますが、一部サポートされていない型もあります。ご利用のデータの型がサポートされていることをご確認ください。
次の表に、DRDS (PolarDB-X 1.0) Reader と Writer でサポートされているデータの型をリストします。
型カテゴリ | 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 で同期タスクを開発する前に、「データソース管理」の指示に従って、必要なデータソースを DataWorks に追加する必要があります。データソースを追加する際、各パラメーターの意味については、DataWorks コンソールでパラメーターの説明をご参照ください。
データ同期タスクの開発
同期タスクの設定のエントリポイントとプロシージャについては、以下の設定ガイドをご参照ください。
単一テーブルのオフライン同期タスクの設定
詳細については、「コードレス UI でのタスク設定」および「コードエディタでのタスク設定」をご参照ください。
コードエディタのすべてのパラメーターとスクリプト例のリストについては、「付録:スクリプトのデモとパラメーター」をご参照ください。
データベース全体のオフライン同期タスクの設定
詳細については、「データベース全体のオフライン同期タスクの設定」をご参照ください。
よくある質問
一貫性ビューの問題
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` 句を追加するだけです。
新しいストリーミングデータの場合、前の段階からの最大自動インクリメント ID を含む `WHERE` 句を DRDS (PolarDB-X 1.0) Reader の設定に追加できます。
アプリケーションに新規データと変更済みデータを区別するフィールドがない場合、DRDS (PolarDB-X 1.0) Reader は増分データ同期を実行できません。完全データのみを同期できます。
`WHERE` 句では、物理テーブルに関連するフィルター条件はサポートされていません。
付録:スクリプトのデモとパラメーター
コードエディタを使用したバッチ同期タスクの設定
コードエディタを使用してバッチ同期タスクを設定する場合、統一されたスクリプトフォーマットの要件に基づいて、スクリプト内の関連パラメーターを設定する必要があります。詳細については、「コードエディタでのタスク設定」をご参照ください。以下では、コードエディタを使用してバッチ同期タスクを設定する際に、データソースに対して設定する必要があるパラメーターについて説明します。
Reader スクリプトのデモ
{
"type":"job",
"version":"2.0",// バージョン番号
"steps":[
{
"stepType":"drds",// プラグイン名
"parameter":{
"datasource":"",// データソース名
"column":[// 列名
"id",
"name"
],
"where":"",// フィルター条件
"table":"",// テーブル名
"splitPk": ""// シャードキー
},
"name":"Reader",
"category":"reader"
},
{
"stepType":"stream",// プラグイン名
"parameter":{},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":"0"// エラーレコード数
},
"speed":{
"throttle":true,// throttle が false の場合、mbps パラメーターは有効にならず、データレートは制限されません。throttle が true の場合、データレートは制限されます。
"concurrent":1,// 同時実行数
"mbps":"12"// 最大データレート。1 mbps = 1 MB/s。
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}Reader スクリプトのパラメーター
パラメーター | 説明 | 必須 | デフォルト値 |
datasource | データソースの名前。コードエディタはデータソースの追加をサポートしています。このパラメーターの値は、追加されたデータソースの名前と同じである必要があります。 | はい | なし |
table | データを同期する元のテーブル。 | はい | なし |
column | 指定したテーブルから同期する列。JSON 配列を使用してフィールドを記述します。デフォルトでは、すべての列が使用されます。例:[*]。
| はい | なし |
where | フィルター条件。DRDS (PolarDB-X 1.0) Reader は、指定された column、table、および where パラメーターに基づいて SQL 文を構築し、その SQL 文に基づいてデータを抽出します。
たとえば、テスト中に `where` 条件を使用してビジネスシナリオを指定できます。通常、当日のデータを同期することがあります。その場合、where 条件を | いいえ | なし |
Writer スクリプトのデモ
{
"type":"job",
"version":"2.0",// バージョン番号。
"steps":[
{
"stepType":"stream",
"parameter":{},
"name":"Reader",
"category":"reader"
},
{
"stepType":"drds",// プラグイン名。
"parameter":{
"postSql":[],// データ同期タスクの後に実行する SQL 文。
"datasource":"",// データソース。
"column":[// 列名。
"id"
],
"writeMode":"insert ignore",
"batchSize":"1024",// 1 回のバッチでコミットするレコード数。
"table":"test",// テーブル名。
"preSql":[]// データ同期タスクの前に実行する SQL 文。
},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":"0"// エラーレコード数。
},
"speed":{
"throttle":true,// throttle が false の場合、mbps パラメーターは有効にならず、データレートは制限されません。throttle が true の場合、データレートは制限されます。
"concurrent":1, // 同時実行タスクの数。
"mbps":"12"// 最大データレート。1 mbps = 1 MB/s。
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}Writer スクリプトのパラメーター
パラメーター | 説明 | 必須 | デフォルト値 |
datasource | データソースの名前。コードエディタはデータソースの追加をサポートしています。このパラメーターの値は、追加されたデータソースの名前と同じである必要があります。 | はい | なし |
table | データを同期する先のテーブル。 | はい | なし |
writeMode | インポートモード。有効な値:insert ignore および replace into。
| いいえ | insert ignore |
column | データを書き込む宛先テーブルのフィールド。フィールドはカンマ (,) で区切ります。例:"column": ["id", "name", "age"]。すべての列に順番に書き込むには、アスタリスク (*) を使用します。例:"column": ["*"]。 | はい | なし |
preSql | データ同期タスクの前に実行する SQL 文。コードレス UI では 1 つの SQL 文しか実行できません。コードエディタでは複数の SQL 文を実行できます。 例: | いいえ | なし |
postSql | データ同期タスクの後に実行する SQL 文。コードレス UI では 1 つの SQL 文しか実行できません。コードエディタでは複数の SQL 文を実行できます。 例: | いいえ | なし |
batchSize | 1 回のバッチでコミットするレコード数。値を大きくすると、データ同期システムと DRDS (PolarDB-X 1.0) 間のネットワークインタラクションが大幅に減少し、全体的なスループットが向上します。この値が大きすぎると、データ同期プロセスでメモリ不足 (OOM) エラーが発生する可能性があります。 | いいえ | 1,024 |