Topik ini menjelaskan cara mengonfigurasi titik pemisah dalam skrip untuk memperbaiki masalah sinkronisasi lambat yang terjadi saat menggunakan Tablestore Reader untuk menyinkronkan data penuh.
Deskripsi masalah
Saat menggunakan Tablestore Reader untuk menyinkronkan data penuh, kecepatan sinkronisasi rendah. Contoh kode berikut menunjukkan cara mengonfigurasi sinkronisasi data penuh:
"reader": {
"plugin": "ots",
"parameter": {
"datasource": "",
"table": "",
"column": [],
"range": {
"begin": [
{
"type": "INF_MIN"
}
],
"end": [
{
"type": "INF_MAX"
}
]
}
}
}Penyebab
Sejumlah besar data disinkronkan tanpa titik pemisah yang dikonfigurasi dalam skrip, dan hanya satu utas yang digunakan untuk mendapatkan data. Hal ini memengaruhi kecepatan sinkronisasi data.
Solusi
Untuk menyinkronkan sejumlah besar data menggunakan Tablestore Reader, konfigurasikan titik pemisah dalam skrip. Ikuti langkah-langkah berikut:
Dapatkan informasi tentang titik pemisah yang diperlukan dengan salah satu metode berikut:
Gunakan Tablestore SDK for Java untuk memanggil operasi ComputeSplitPointsBySize. Untuk informasi lebih lanjut, lihat Pisahkan data menjadi shard dengan ukuran tertentu.
Contoh respons:
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_MAXUnduh CLI Tablestore. Kemudian, jalankan perintah
points -s splitSize -t tablename. Untuk informasi lebih lanjut, lihat Mulai CLI Tablestore dan konfigurasikan informasi akses.CatatanSatuan nilai splitSize adalah 100 MB. Jika jumlah data yang ingin disinkronkan kecil, tidak perlu mengonfigurasi titik pemisah. Namun, jika jumlah datanya besar, kami sarankan Anda menentukan nilai parameter splitSize berdasarkan jumlah maksimum utas konkuren yang didukung di lingkungan Anda.
Contoh respons:
[ { "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" } ]Temukan nilai kolom kunci utama pertama. Sebagai contoh, nilai parameter
pkname1dari LowerBound pertama adalah null, nilai parameterpkname1dari UpperBound pertama adalah "cbcf23c8cdf831261f5b3c052db3479e\u0000", nilai parameterpkname1dari LowerBound kedua adalah "cbcf23c8cdf831261f5b3c052db3479e\u0000", dan nilai parameterpkname1dari UpperBound kedua adalah null. Untuk menyinkronkan data penuh, konfigurasikan pengaturan berikut dalam skrip:"split" : [ { "type":"STRING", "value":"cbcf23c8cdf831261f5b3c052db3479e\u0000" } ]Saat menjalankan skrip di atas, Tablestore membagi data penuh menjadi dua bagian dan secara bersamaan mendapatkan data berdasarkan rentang
(INF_MIN,cbcf23c8cdf831261f5b3c052db3479e\u0000)dan[cbcf23c8cdf831261f5b3c052db3479e\u0000,INF_MAX). Dengan cara ini, sinkronisasi data dipercepat.
Konfigurasikan titik pemisah dalam skrip yang digunakan untuk menyinkronkan data. Contoh kode berikut menunjukkan cara mengonfigurasi titik pemisah:
"range": { "begin": [ { "type": "INF_MIN" } ], "end": [ { "type": "INF_MAX" } ], "split": [ { "type": "STRING", "value": "splitPoint1" }, { "type": "STRING", "value": "splitPoint2" }, { "type": "STRING", "value": "splitPoint3" } ] }
Jika sinkronisasi tetap lambat setelah mengonfigurasi titik pemisah, ajukan tiket untuk menghubungi dukungan teknis.