TairSearch adalah modul pengambilan dalam memori real-time yang menawarkan kemampuan caching dan komputasi. Sebagai fitur inti dari modul ini, indeks terbalik mendukung penyimpanan data panas dan kueri pencocokan kabur berbasis akar kata. Hal ini membantu mengintegrasikan penyimpanan data dan komputasi untuk mencapai kueri lebih cepat dengan indeks multi-kolom.
Informasi latar belakang
Secara umum, data penting dari layanan aplikasi di industri Internet dan tradisional disimpan dalam database relasional seperti MySQL. Untuk mengurangi beban akses database dan meningkatkan efisiensi kueri, sistem caching nilai-kunci seperti Redis digunakan untuk mengkueri data panas. Namun, sistem caching nilai-kunci biasa tidak dapat bekerja secara mandiri untuk kueri dengan indeks multi-kolom atau kueri pencocokan kabur berbasis LIKE. Dalam hal ini, mekanisme penyaringan tambahan seperti skrip Lua dan komputasi pada disk diperlukan untuk mengimplementasikan kueri dengan indeks multi-kolom.
Batasan Sistem Caching Nilai-Kunci pada Kueri dengan Indeks Multi-Kolom
Secara umum, ketika data diimpor dari database relasional ke sistem caching nilai-kunci seperti Redis, baris disimpan dalam hash. Kunci utama dari baris tersebut digunakan sebagai kunci hash. Bidang lain dari baris tersebut dan nilainya digunakan sebagai bidang hash dan nilainya.
Jika kueri hanya melibatkan indeks kunci utama, Anda dapat menjalankan perintah HMGET di Redis untuk mengkueri informasi bidang tertentu. Database relasional memungkinkan Anda membuat indeks kunci utama, beberapa indeks sekunder, dan indeks multi-kolom untuk meningkatkan efisiensi kueri. Sebagai perbandingan, Redis memiliki batasan dalam skenario berikut:
Kueri dengan indeks sekunder: Redis tidak mengizinkan kueri berdasarkan bidang hash. Oleh karena itu, Anda harus membuat struktur hash dua lapis untuk menyimpan indeks sekunder dari database relasional. Namun, struktur hash dua lapis ini membuat impor data ke Redis menjadi lebih kompleks dan menyebabkan pemborosan memori karena redundansi data.
Kueri dengan indeks multi-kolom: Redis tidak mengizinkan kueri multi-kolom pada hash. Kueri multi-kolom hanya dapat diimplementasikan dengan cara skrip Lua atau komputasi pada disk.
Topik ini menjelaskan cara menggunakan TairSearch untuk mempercepat kueri dengan indeks multi-kolom. Dalam contoh ini, TairSearch digunakan untuk mendukung pencarian tiket penerbangan selama lonjakan lalu lintas.
Untuk informasi lebih lanjut tentang TairSearch, lihat Search.
Contoh pencarian tiket penerbangan yang akurat
Selama hari libur umum, lonjakan lalu lintas dapat terjadi sebagai hasil dari volume pencarian besar-besaran untuk penerbangan ke tujuan wisata populer. Dalam hal ini, TairSearch dapat digunakan untuk menyimpan informasi penerbangan.
Buat indeks dokumen
Dalam contoh ini, pencarian tiket penerbangan yang akurat melibatkan kata kunci seperti tempat keberangkatan, tujuan, tanggal keberangkatan, kelas kursi, dan apakah bepergian dengan bayi atau anak.
Dalam contoh ini, kombinasi tempat keberangkatan dan tujuan digunakan sebagai kunci (departure_destination) dari indeks di TairSearch. Contoh nilai kunci: zhuhai_hangzhou. Bidang indeks berikut dibuat: departure, destination, date, seat, with, flight_id, price, departure_time, dan destination_time.
Jika Anda ingin menambahkan atau memodifikasi bidang, jalankan perintah TFT.UPDATEINDEX.
Contoh kode:
TFT.CREATEINDEX zhuhai_hangzhou '{
"mappings":{
"properties":{
"departure":{"type":"keyword"},
"destination":{"type":"keyword"},
"date":{"type":"keyword"},
"seat":{"type":"keyword"},
"with":{"type":"keyword"},
"flight_id":{"type":"keyword"},
"price":{"type":"double"},
"departure_time":{"type":"long"},
"destination_time":{"type":"long"}
}
}
}'Output yang Diharapkan:
OKTulis data ke dokumen TairSearch
Tulis informasi penerbangan ke dokumen TairSearch. Contoh kode:
TFT.ADDDOC zhuhai_hangzhou '{
"departure":"zhuhai",
"destination":"hangzhou",
"date":"2022-09-01",
"seat":"first",
"with":"baby",
"flight_id":"CZ1000",
"price":986.1,
"departure_time":1661991010,
"destination_time":1661998210
}'Output yang Diharapkan:
"{"_id":"16615908912020060"}"
# ID dokumen dikembalikan dalam format JSON.Cari informasi penerbangan secara akurat
Cari penerbangan yang memiliki kursi kelas satu dan dijadwalkan berangkat pada 1 September 2022 dari Zhuhai ke Hangzhou. Tampilkan penerbangan dalam urutan waktu keberangkatannya. Contoh kode:
TFT.Search zhuhai_hangzhou '{"sort":["departure_time"],"query":{"bool":{"must":[{"term":{"date":"2022-09-01"}},{"term":{"seat":"first"}}]}}}'Output yang Diharapkan:
"{
"hits": {
"hits": [
{
"_id": "16615908912020060",
"_index": "zhuhai_hangzhou",
"_score": 0.433955,
"_source": {
"departure": "zhuhai",
"destination": "hangzhou",
"date": "2022-09-01",
"seat": "first",
"with": "baby",
"flight_id": "CZ1000",
"price": 986.1,
"departure_time": 1661991010,
"destination_time": 1661998210
}
}
],
"max_score": 0.433955,
"total": {
"relation": "eq",
"value": 1
}
}
}"