當使用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" } ]
使用上述配置時,Table Store會將全量資料分為
(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位點後,如果同步速度仍未提升,請提交工單聯絡Table Store支援人員進行處理。