Cette rubrique explique comment configurer les points de fractionnement dans le script afin de résoudre les problèmes de lenteur rencontrés lors de la synchronisation complète des données avec Tablestore Reader.
Description du problème
Lorsque vous utilisez Tablestore Reader pour synchroniser l'intégralité des données, la vitesse de synchronisation est faible. L'extrait de code suivant illustre la configuration de la synchronisation complète des données :
"reader": {
"plugin": "ots",
"parameter": {
"datasource": "",
"table": "",
"column": [],
"range": {
"begin": [
{
"type": "INF_MIN"
}
],
"end": [
{
"type": "INF_MAX"
}
]
}
}
}
Cause
Un volume important de données est synchronisé, aucun point de fractionnement n'est configuré dans le script et un seul thread est créé pour récupérer les données. Dans ce cas, la vitesse de synchronisation des données s'en trouve affectée.
Solution
Si vous souhaitez synchroniser un volume important de données à l'aide de Tablestore Reader, configurez des points de fractionnement dans le script. Pour ce faire, suivez les étapes ci-dessous :
-
Récupérez les informations relatives aux points de fractionnement requis en utilisant l'une des méthodes suivantes :
-
Utilisez le SDK Tablestore pour Java afin d'appeler l'opération ComputeSplitPointsBySize. Pour plus d'informations, consultez la rubrique Fractionner les données en shards d'une taille spécifique.
Exemple de réponse :
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 -
Téléchargez l'interface CLI Tablestore. Ensuite, exécutez la commande
points -s splitSize -t tablename. Pour plus d'informations, consultez la rubrique Démarrer l'interface CLI Tablestore et configurer les informations d'accès.RemarqueL'unité de la valeur splitSize est de 100 Mo. Si le volume de données à synchroniser est faible, il n'est pas nécessaire de configurer des points de fractionnement. Si le volume de données est important, nous vous recommandons de spécifier une valeur pour le paramètre splitSize en fonction du nombre maximal de threads simultanés pris en charge par votre environnement.
Exemple de réponse :
[ { "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" } ]Identifiez les valeurs des premières colonnes de clé primaire. Par exemple, la valeur du paramètre
pkname1de la première LowerBound est null, la valeur du paramètrepkname1de la première UpperBound est « cbcf23c8cdf831261f5b3c052db3479e\u0000 », la valeur du paramètrepkname1de la deuxième LowerBound est « cbcf23c8cdf831261f5b3c052db3479e\u0000 » et la valeur du paramètrepkname1de la deuxième UpperBound est null. Pour synchroniser l'intégralité des données, configurez les paramètres suivants dans le script :"split" : [ { "type":"STRING", "value":"cbcf23c8cdf831261f5b3c052db3479e\u0000" } ]Lorsque vous exécutez le script précédent, Tablestore divise l'intégralité des données en deux parties et récupère les données simultanément selon les plages
(INF_MIN,cbcf23c8cdf831261f5b3c052db3479e\u0000)et[cbcf23c8cdf831261f5b3c052db3479e\u0000,INF_MAX). Cette approche accélère la synchronisation des données.
-
-
Configurez les points de fractionnement dans le script utilisé pour la synchronisation des données. L'extrait de code suivant montre comment configurer ces points :
"range": { "begin": [ { "type": "INF_MIN" } ], "end": [ { "type": "INF_MAX" } ], "split": [ { "type": "STRING", "value": "splitPoint1" }, { "type": "STRING", "value": "splitPoint2" }, { "type": "STRING", "value": "splitPoint3" } ] }
Si la synchronisation reste lente après la configuration des points de fractionnement, soumettez un ticket pour contacter le support technique.