全部產品
Search
文件中心

Tablestore:使用Tablestore(OTS)Reader同步全量資料時如何配置Split

更新時間:Jul 23, 2024

當使用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。具體操作如下:

  1. 通過如下任意方式擷取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)兩個區間進行資料並發拉取,提高同步速度。

  2. 在同步指令碼中配置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支援人員進行處理。