このトピックでは、Tablestore Readerを使用してフルデータを同期するときに発生する同期速度低下の問題を解決するために、スクリプトで分割ポイントを設定する方法について説明します。
問題の説明
Tablestore Readerを使用してフルデータを同期すると、データの同期速度が低下します。次のサンプルコードは、フルデータ同期を設定する方法を示しています。
"reader": {
"plugin": "ots",
"parameter": {
"datasource": "",
"table": "",
"column": [],
"range": {
"begin": [
{
"type": "INF_MIN"
}
],
"end": [
{
"type": "INF_MAX"
}
]
}
}
}
原因
大量のデータが同期され、スクリプトに分割ポイントが設定されておらず、データを取得するために1つのスレッドのみが作成されます。この場合、データの同期速度に影響します。
解決策
Tablestore Readerを使用して大量のデータを同期する場合は、スクリプトで分割ポイントを設定します。スクリプトで分割ポイントを設定するには、次の手順を実行します。
次のいずれかの方法を使用して、必要な分割ポイントに関する情報を取得します。
Tablestore SDK for Javaを使用して、ComputeSplitPointsBySizeオペレーションを呼び出します。詳細については、特定のサイズのシャードへのデータの分割を参照してください。
サンプルレスポンス:
LowerBound:pkname1:INF_MIN, pkname2:INF_MIN UpperBound:pkname1:cbcf23c8cdf831261f5b3c052db3479e, pkname2:INF_MIN LowerBound:pkname1:cbcf23c8cdf831261f5b3c052db3479e, pkname2:INF_MIN UpperBound:pkname1:INF_MAX, pkname2:INF_MAX
Tablestore CLIをダウンロードします。次に、
points -s splitSize -t tablename
コマンドを実行します。詳細については、Tablestore CLIの起動とアクセス情報の構成を参照してください。説明splitSize値の単位は100 MBです。同期するデータ量が小さい場合は、分割ポイントを設定する必要はありません。同期するデータ量が大きい場合は、環境でサポートされている最大同時スレッド数に基づいてsplitSizeパラメータの値を指定することをお勧めします。
サンプルレスポンス:
[ { "LowerBound": { "PrimaryKeys": [ { "ColumnName": "pkname1", "Value": null, "PrimaryKeyOption": 2 }, { "ColumnName": "pkname2", "Value": null, "PrimaryKeyOption": 2 } ] }, "UpperBound": { "PrimaryKeys": [ { "ColumnName": "pkname1", "Value": "cbcf23c8cdf831261f5b3c052db3479e\u0000", "PrimaryKeyOption": 0 }, { "ColumnName": "pkname2", "Value": null, "PrimaryKeyOption": 2 } ] }, "Location": "80310717938EDF503FB1E26F70710391" }, { "LowerBound": { "PrimaryKeys": [ { "ColumnName": "pkname1", "Value": "cbcf23c8cdf831261f5b3c052db3479e\u0000", "PrimaryKeyOption": 0 }, { "ColumnName": "pkname2", "Value": null, "PrimaryKeyOption": 2 } ] }, "UpperBound": { "PrimaryKeys": [ { "ColumnName": "pkname1", "Value": null, "PrimaryKeyOption": 3 }, { "ColumnName": "pkname2", "Value": null, "PrimaryKeyOption": 3 } ] }, "Location": "80310717938EDF503FB1E26F70710391" } ]
最初のプライマリキー列の値を見つけます。たとえば、最初のLowerBoundの
pkname1
パラメータの値はnull、最初のUpperBoundのpkname1
パラメータの値は "cbcf23c8cdf831261f5b3c052db3479e\u0000"、2番目のLowerBoundのpkname1
パラメータの値は "cbcf23c8cdf831261f5b3c052db3479e\u0000"、2番目のUpperBoundのpkname1
パラメータの値はnullです。フルデータを同期するには、スクリプトで次の設定を行います。"split" : [ { "type":"STRING", "value":"cbcf23c8cdf831261f5b3c052db3479e\u0000" } ]
上記のスクリプトを実行すると、Tablestoreはフルデータを2つの部分に分割し、
(INF_MIN,cbcf23c8cdf831261f5b3c052db3479e\u0000)
と[cbcf23c8cdf831261f5b3c052db3479e\u0000,INF_MAX)
の範囲に基づいて同時にデータを取得します。これにより、データ同期が高速化されます。
データの同期に使用するスクリプトで分割ポイントを設定します。次のサンプルコードは、分割ポイントを設定する方法を示しています。
"range": { "begin": [ { "type": "INF_MIN" } ], "end": [ { "type": "INF_MAX" } ], "split": [ { "type": "STRING", "value": "splitPoint1" }, { "type": "STRING", "value": "splitPoint2" }, { "type": "STRING", "value": "splitPoint3" } ] }
分割ポイントを設定した後も同期が遅い場合は、チケットを送信してくださいしてテクニカルサポートにご連絡ください。