当使用Tablestore(OTS)Reader同步全量数据过程中出现同步速度较慢问题时,请在同步脚本中配置Split。
现象
使用Tablestore(OTS)Reader同步全量数据过程中出现同步速度较慢问题。同步脚本的配置如下:
"reader": {
"plugin": "ots",
"parameter": {
"datasource": "",
"table": "",
"column": [],
"range": {
"begin": [
{
"type": "INF_MIN"
}
],
"end": [
{
"type": "INF_MAX"
}
]
}
}
}
原因
全量数据非常大且未在同步脚本中配置Split,此时同步任务为单并发拉取数据,会影响数据的同步速度。
解决方案
当全量数据非常大时,请在同步脚本中配置Split。具体操作如下:
通过如下任意方式获取Split位点,请根据实际选择。
使用Java SDK调用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
命令获取。具体操作,请参见命令行工具。说明splitSize以100 MB为单位。当数据量较少时,无需配置Split位点;当数据量较多时,建议根据同步环境所能支持的最大并发度合理配置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" } ]
找到返回示例中第一列主键(即分区键)的Value,例如第一个LowerBound的
pkname1 = null
,第一个UpperBound的pkname1 = "cbcf23c8cdf831261f5b3c052db3479e\u0000"
,第二个LowerBound的pkname1 = "cbcf23c8cdf831261f5b3c052db3479e\u0000"
,第二个UpperBound的pkname1 = null
,则全量同步脚本中的split配置如下:"split" : [ { "type":"STRING", "value":"cbcf23c8cdf831261f5b3c052db3479e\u0000" } ]
使用上述配置时,表格存储会将全量数据分为
(INF_MIN,cbcf23c8cdf831261f5b3c052db3479e\u0000)
和[cbcf23c8cdf831261f5b3c052db3479e\u0000,INF_MAX)
两个区间进行数据并发拉取,提高同步速度。
在同步脚本中配置Split位点。同步脚本示例如下:
"range": { "begin": [ { "type": "INF_MIN" } ], "end": [ { "type": "INF_MAX" } ], "split": [ { "type": "STRING", "value": "splitPoint1" }, { "type": "STRING", "value": "splitPoint2" }, { "type": "STRING", "value": "splitPoint3" } ] }
配置Split位点后,如果同步速度仍未提升,请提交工单联系表格存储技术支持进行处理。