Gunakan Tablestore SDK untuk Go guna membuat indeks pengindeksan ulang berdasarkan indeks pencarian sumber dan ubah skemanya tanpa mengganggu operasi baca atau tulis pada tabel.
Prasyarat
Pasang Tablestore Go SDK dan inisialisasi klien.
Deskripsi
Modifikasi skema secara dinamis melibatkan pembuatan indeks pengindeksan ulang, sinkronisasi data, validasi indeks baru dengan traffic, lalu pergantian indeks. Operasi baca dan tulis pada tabel tetap berjalan selama proses ini, dan kode kueri yang menggunakan nama indeks sumber tidak perlu diubah. Alur kerjanya sebagai berikut:
Buat indeks pengindeksan ulang yang berisi skema baru lengkap berdasarkan indeks sumber.
Tunggu hingga indeks pengindeksan ulang memasuki Sinkronisasi inkremental dan tersinkronisasi penuh dengan indeks sumber.
Alokasikan traffic kueri sesuai kebutuhan dan validasi hasil dari skema baru.
Lakukan pergantian indeks setelah hasilnya sesuai ekspektasi.
-
Amati indeks tersebut selama periode tertentu, lalu hapus indeks pengindeksan ulang yang mengarah ke skema lama setelah Anda memastikan operasi berjalan normal.
PentingNama indeks pengindeksan ulang harus diakhiri dengan
_reindex. Target indeks dan bobot traffic berubah selama alur kerja. Jangan gunakan nama indeks pengindeksan ulang sebagai titik akhir kueri jangka panjang. Anda dapat membuat hingga lima indeks secara bersamaan. Sebelum memulai batch berikutnya, tunggu hingga batch saat ini tersinkronisasi penuh dengan indeks sumber atau menyelesaikan pergantian indeks.
1. Buat indeks pengindeksan ulang
sourceIndexName := "example_index"
reindexName := "example_index_reindex"
newSchema := []*tablestore.FieldSchema{
{
FieldName: proto.String("category"),
FieldType: tablestore.FieldType_KEYWORD,
Index: proto.Bool(true),
},
{
FieldName: proto.String("new_field"),
FieldType: tablestore.FieldType_KEYWORD,
Index: proto.Bool(true),
},
}
_, err := client.CreateSearchIndex(&tablestore.CreateSearchIndexRequest{
TableName: "example_table",
IndexName: reindexName,
SourceIndexName: &sourceIndexName,
IndexSchema: &tablestore.IndexSchema{
FieldSchemas: newSchema,
},
})
if err != nil {
log.Fatal(err)
}
Setelah permintaan berhasil, gunakan Kueri informasi indeks pencarian untuk memeriksa skema dan status sinkronisasi. Nilai SyncPhase sebesar INCR menunjukkan Sinkronisasi inkremental. Sebelum mengalokasikan traffic, pastikan juga bahwa sinkronisasi telah tersinkronisasi penuh dengan indeks sumber.
2. Konfigurasikan traffic kueri
weights := []*tablestore.QueryFlowWeight{
{IndexName: "example_index", Weight: 50},
{IndexName: "example_index_reindex", Weight: 50},
}
_, err := client.UpdateSearchIndex(&tablestore.UpdateSearchIndexRequest{
TableName: "example_table",
IndexName: "example_index",
QueryFlowWeights: weights,
})
if err != nil {
log.Fatal(err)
}
Mulailah dengan jumlah traffic kueri yang kecil untuk memvalidasi skema baru, lalu tingkatkan secara bertahap bobot indeks pengindeksan ulang. Total bobot kedua indeks harus berjumlah 100.
3. Ganti indeks
reindexName := "example_index_reindex"
_, err := client.UpdateSearchIndex(&tablestore.UpdateSearchIndexRequest{
TableName: "example_table",
IndexName: "example_index",
SwitchIndexName: &reindexName,
})
if err != nil {
log.Fatal(err)
}
Setelah pergantian, nama indeks sumber mengarah ke skema baru, sedangkan nama indeks pengindeksan ulang mengarah ke skema lama. Amati indeks baru selama periode tertentu dan hapus indeks pengindeksan ulang hanya setelah Anda memastikan operasi berjalan normal.
Parameter
Buat indeks pengindeksan ulang
|
Name |
Type |
Description |
|
TableName (required) |
string |
Nama tabel data. |
|
IndexName (required) |
string |
Nama indeks pengindeksan ulang, yang harus diakhiri dengan _reindex. |
|
SourceIndexName (required) |
*string |
Nama indeks sumber. |
|
IndexSchema (required) |
*tablestore.IndexSchema |
Skema indeks terbaru yang lengkap. Untuk parameter bidang, routing, dan presorting, lihat Buat indeks pencarian. |
|
TimeToLive (optional) |
*int32 |
TTL indeks pengindeksan ulang. Untuk nilai dan batasan yang valid, lihat Konfigurasikan TTL indeks pencarian. |
Konfigurasikan traffic dan ganti indeks
|
Name |
Type |
Description |
|
TableName (required) |
string |
Nama tabel data. |
|
IndexName (required) |
string |
Nama indeks sumber. |
|
QueryFlowWeights (optional) |
[]*tablestore.QueryFlowWeight |
Bobot traffic untuk indeks sumber dan indeks pengindeksan ulang. |
|
SwitchIndexName (optional) |
*string |
Indeks pengindeksan ulang yang targetnya ditukar dengan indeks sumber. |