全部产品
Search
文档中心

表格存储:使用Tablestore(OTS)Reader同步全量数据时如何配置Split

更新时间:Jul 22, 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"
      
       }
      
      ]

      使用上述配置时,表格存储会将全量数据分为(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位点后,如果同步速度仍未提升,请提交工单联系表格存储技术支持进行处理。