Este tópico descreve como configurar pontos de divisão no script para corrigir a lentidão na sincronização que ocorre ao usar o Tablestore Reader para sincronizar dados completos.
Descrição do problema
Ao usar o Tablestore Reader para sincronizar dados completos, a velocidade de sincronização é baixa. O código de exemplo a seguir mostra como configurar a sincronização completa de dados:
"reader": {
"plugin": "ots",
"parameter": {
"datasource": "",
"table": "",
"column": [],
"range": {
"begin": [
{
"type": "INF_MIN"
}
],
"end": [
{
"type": "INF_MAX"
}
]
}
}
}
Causa
Um grande volume de dados está sendo sincronizado sem pontos de divisão configurados no script, o que resulta na criação de apenas uma thread para obter os dados. Isso afeta diretamente a velocidade da sincronização.
Solução
Para sincronizar um grande volume de dados com o Tablestore Reader, configure pontos de divisão no script. Siga as etapas abaixo para configurar esses pontos:
-
Obtenha as informações sobre os pontos de divisão necessários usando um dos métodos a seguir:
-
Use o SDK do Tablestore para Java e chame a operação ComputeSplitPointsBySize. Para mais detalhes, consulte Dividir dados em shards de um tamanho específico.
Resposta de exemplo:
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 -
Baixe a CLI do Tablestore e execute o comando
points -s splitSize -t tablename. Para mais informações, consulte Iniciar a CLI do Tablestore e configurar informações de acesso.NotaA unidade do valor splitSize é 100 MB. Se o volume de dados a ser sincronizado for pequeno, não é necessário configurar pontos de divisão. Para grandes volumes, recomendamos especificar um valor para o parâmetro splitSize com base no número máximo de threads simultâneas suportadas pelo seu ambiente.
Resposta de exemplo:
[ { "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" } ]Identifique os valores das primeiras colunas de chave primária. Por exemplo, o valor do parâmetro
pkname1no primeiro LowerBound é null, o valor do parâmetropkname1no primeiro UpperBound é "cbcf23c8cdf831261f5b3c052db3479e\u0000", o valor do parâmetropkname1no segundo LowerBound é "cbcf23c8cdf831261f5b3c052db3479e\u0000" e o valor do parâmetropkname1no segundo UpperBound é null. Para sincronizar todos os dados, defina as seguintes configurações no script:"split" : [ { "type":"STRING", "value":"cbcf23c8cdf831261f5b3c052db3479e\u0000" } ]Ao executar o script anterior, o Tablestore divide os dados completos em duas partes e obtém os dados simultaneamente com base nos intervalos
(INF_MIN,cbcf23c8cdf831261f5b3c052db3479e\u0000)e[cbcf23c8cdf831261f5b3c052db3479e\u0000,INF_MAX). Dessa forma, a sincronização de dados é acelerada.
-
-
Configure os pontos de divisão no script usado para sincronizar os dados. O código de exemplo a seguir demonstra essa configuração:
"range": { "begin": [ { "type": "INF_MIN" } ], "end": [ { "type": "INF_MAX" } ], "split": [ { "type": "STRING", "value": "splitPoint1" }, { "type": "STRING", "value": "splitPoint2" }, { "type": "STRING", "value": "splitPoint3" } ] }
Caso a sincronização continue lenta mesmo após a configuração dos pontos de divisão, envie um ticket para entrar em contato com o suporte técnico.