TairVector adalah struktur data yang diperluas dari Tair untuk penyimpanan dan pengambilan vektor berkinerja tinggi secara real-time.
TairVector
TairVector menggunakan struktur data hash multi-layer.
TairVector menyediakan dua algoritma pengindeksan: Hierarchical Navigable Small World (HNSW) dan flat search:
-
HNSW: Membuat indeks berbasis graf untuk pencarian vektor dan mendukung reklamasi ruang asinkron. Pendekatan ini menjamin akurasi kueri yang tinggi sekaligus menyeimbangkan kinerja dengan pembaruan real-time.
-
flat search: Memberikan akurasi kueri 100% dan penyisipan data yang cepat, sehingga ideal untuk set data kecil.
TairVector juga mendukung beberapa metrik jarak, seperti Jarak Euclidean, inner product, jarak kosinus, dan jarak Jaccard. Dibandingkan dengan layanan pencarian vektor tradisional, TairVector menawarkan keunggulan berikut:
-
Menyimpan semua data di memori dan mendukung pembaruan indeks real-time untuk mencapai latensi baca-tulis yang lebih rendah.
-
Menggunakan struktur data in-memory yang dioptimalkan untuk mengurangi penggunaan memori.
-
Menyediakan layanan cloud siap pakai dengan arsitektur yang sederhana dan efisien tanpa ketergantungan komponen yang kompleks.
-
Mendukung pencarian hibrida, yang menggabungkan pencarian vektor dengan pencarian teks penuh.
-
Mendukung pembuatan indeks terbalik pada skalar, seperti atribut tag. Hal ini memungkinkan pencarian tetangga terdekat (KNN) untuk terlebih dahulu memfilter berdasarkan skalar, lalu melakukan pencarian vektor pada hasil yang telah difilter.
Catatan rilis
-
13 Oktober 2022: TairVector dirilis pada instans berbasis DRAM Tair yang kompatibel dengan Redis 6.0.
-
22 November 2022 (Versi 6.2.2.0): Menambahkan dukungan untuk metrik jarak Jaccard. Meningkatkan perintah TVS.GETINDEX agar mengembalikan statistik penggunaan memori untuk setiap indeks dalam bidang
index_data_sizedanattribute_data_size. -
26 Desember 2022 (Versi 6.2.3.0): Menambahkan dukungan untuk modus proxy pada kluster, tipe data vektor FLOAT16, serta perintah TVS.MINDEXKNNSEARCH dan TVS.MINDEXMKNNSEARCH.
-
4 Juli 2023 (Versi 6.2.8.2): Menambahkan dukungan untuk metrik jarak kosinus dan garbage collection otomatis untuk indeks HNSW.
-
3 Agustus 2023 (Versi 23.8.0.0): Menambahkan dukungan untuk mengatur time-to-live (TTL) pada level key dengan perintah seperti TVS.HEXPIREAT dan TVS.HPEXPIREAT, serta pencarian tetangga terdekat vektor pada daftar key tertentu dengan perintah TVS.GETDISTANCE. Versi ini juga memperkenalkan pencarian teks penuh melalui pembaruan perintah seperti TVS.CREATEINDEX dan TVS.KNNSEARCH, yang memungkinkan pencarian hibrida.
-
6 Juni 2024 (Versi 24.5.1.0): Menambahkan perintah TVS.KNNSEARCHFIELD dan TVS.MINDEXKNNSEARCHFIELD untuk mengembalikan informasi atribut tag selama pencarian tetangga terdekat.
-
22 Juli 2024 (Versi 24.7.0.0): Mengaktifkan indeks HNSW untuk vektor jarang.
Praktik terbaik
Prasyarat
Instans harus merupakan instans berbasis DRAM yang kompatibel dengan Redis 6.0 atau versi lebih baru.
Instans berbasis DRAM yang menjalankan Redis 5.0 tidak dapat ditingkatkan ke Redis 6.0. Untuk menggunakan Redis 6.0, Anda harus membuat instans berbasis DRAM baru.
Catatan
-
Operasi ini berlaku untuk data TairVector dalam instans Tair.
-
TairVector tidak mendukung fitur Redis hashtags pada bidang seperti index_name dan Key.
-
TairVector tidak mendukung perintah seperti MOVE.
-
Untuk kebutuhan persistensi data yang tinggi, aktifkan modus replikasi semi-sinkron.
Referensi perintah
Tabel 1. Perintah TairVector
|
Jenis |
Perintah |
Sintaks |
Deskripsi |
|
Operasi indeks |
|
Membuat indeks vektor, menentukan algoritma untuk membangun dan mengkueri indeks, serta fungsi jarak. Indeks hanya dapat dihapus dengan perintah |
|
|
|
Mengambil metadata dari indeks vektor tertentu. |
||
|
|
Menghapus indeks vektor tertentu beserta seluruh datanya. |
||
|
|
Memindai secara inkremental indeks vektor dalam instans Tair yang sesuai dengan kriteria tertentu. |
||
|
Operasi data vektor |
|
Menyisipkan catatan data ke dalam indeks vektor. Jika catatan data dengan key tertentu sudah ada, catatan yang ada akan ditimpa. |
|
|
|
Mengambil semua atribut dan nilai catatan data untuk key tertentu dalam indeks vektor. |
||
|
|
Mengembalikan nilai kunci atribut tertentu untuk key tertentu dalam indeks vektor. |
||
|
|
Menghapus catatan data (key) tertentu dari indeks vektor tertentu. |
||
|
|
Menghapus satu atau beberapa kunci atribut dan nilainya dari catatan (key) dalam indeks vektor. |
||
|
|
Memindai catatan data (diidentifikasi oleh key) yang memenuhi kondisi tertentu dalam indeks vektor tertentu. |
||
|
|
Menambah nilai integer dari |
||
|
|
Menambah nilai |
||
|
|
Menetapkan waktu kedaluwarsa absolut dalam milidetik untuk catatan data, diidentifikasi oleh key-nya, dalam indeks vektor tertentu. |
||
|
|
Menetapkan waktu kedaluwarsa relatif dalam milidetik untuk key tertentu dalam indeks vektor. |
||
|
|
Menetapkan waktu kedaluwarsa absolut untuk key tertentu dalam indeks vektor, akurat hingga detik. |
||
|
|
Menetapkan waktu kedaluwarsa relatif dalam detik untuk vektor (key) tertentu dalam indeks vektor. |
||
|
|
Mengembalikan TTL, dalam milidetik, untuk catatan data (key) tertentu dalam indeks vektor. |
||
|
|
Mengambil TTL dalam detik untuk catatan data (key) tertentu dalam indeks vektor tertentu. |
||
|
|
Mengembalikan waktu kedaluwarsa absolut catatan data (key) tertentu dalam indeks vektor, sebagai stempel waktu UNIX dalam milidetik. |
||
|
|
Mengembalikan waktu kedaluwarsa absolut catatan data (key) tertentu dalam indeks vektor sebagai stempel waktu UNIX dalam detik. |
||
|
Kueri tetangga terdekat vektor |
|
Menjalankan kueri tetangga terdekat untuk vektor tertentu dalam indeks vektor dan mengembalikan hingga topN hasil. |
|
|
|
Mencari tetangga terdekat vektor tertentu dalam indeks vektor. Logika pencarian identik dengan TVS.KNNSEARCH, tetapi perintah ini juga mengembalikan atribut tag. |
||
|
|
Menemukan tetangga terdekat dari vektor kueri dari daftar key tertentu dalam indeks vektor. |
||
|
|
Menjalankan pencarian tetangga terdekat batch untuk beberapa vektor dalam indeks vektor tertentu. |
||
|
|
Mencari tetangga terdekat vektor tertentu di beberapa indeks vektor. |
||
|
|
Menjalankan kueri tetangga terdekat untuk vektor tertentu di beberapa indeks vektor dan secara opsional mengembalikan tag. |
||
|
|
Mencari beberapa indeks vektor untuk tetangga terdekat dari beberapa vektor. |
||
|
Umum |
|
Menghapus satu atau beberapa indeks TairVector menggunakan perintah Redis DEL asli. |
Daftar berikut menjelaskan konvensi sintaks perintah yang digunakan dalam topik ini:
Kata kunci huruf kapital: menunjukkan kata kunci perintah.Teks miring: menunjukkan variabel.[opsi]: menunjukkan bahwa parameter yang diapit bersifat opsional. Parameter yang tidak diapit kurung siku harus ditentukan.A|B: menunjukkan bahwa parameter yang dipisahkan oleh garis vertikal (|) saling eksklusif. Hanya satu parameter yang dapat ditentukan....: menunjukkan bahwa parameter sebelum simbol ini dapat diulang.
TVS.CREATEINDEX
|
Item |
Deskripsi |
|
Sintaks |
|
|
Kompleksitas waktu |
O(1) |
|
Deskripsi perintah |
Membuat indeks vektor, menentukan algoritma untuk membangun dan mengkueri indeks, serta fungsi jarak. Indeks hanya dapat dihapus dengan perintah |
|
Parameter |
|
|
Nilai kembali |
|
|
Contoh |
Contoh perintah:
Contoh output:
|
TVS.GETINDEX
|
Item |
Deskripsi |
|
Sintaks |
|
|
Kompleksitas waktu |
O(1) |
|
Deskripsi perintah |
Mengambil metadata dari indeks vektor tertentu. |
|
Parameter |
|
|
Output |
|
|
Contoh |
Jalankan perintah berikut terlebih dahulu:
Contoh perintah untuk indeks HNSW:
Contoh output:
|
TVS.DELINDEX
|
Item |
Deskripsi |
|
sintaks |
|
|
kompleksitas waktu |
O(N), di mana N adalah jumlah key dalam indeks vektor. |
|
deskripsi |
Menghapus indeks vektor tertentu beserta seluruh datanya. |
|
parameter |
|
|
nilai kembali |
|
|
contoh |
Perintah:
Output:
|
TVS.SCANINDEX
|
Item |
Deskripsi |
|
Sintaks |
|
|
Kompleksitas waktu |
O(N), di mana N adalah jumlah indeks vektor dalam instans Tair. |
|
Deskripsi perintah |
Memindai secara inkremental indeks vektor dalam instans Tair yang sesuai dengan kriteria tertentu. |
|
Opsi |
|
|
Output |
|
|
Contoh |
Contoh perintah:
Contoh output:
Contoh perintah dengan pola:
Contoh output:
|
TVS.HSET
|
Item |
Deskripsi |
|
Sintaks |
|
|
Kompleksitas waktu |
Kompleksitas waktu adalah O(1) jika tidak ada data vektor yang dibuat atau diperbarui; jika tidak, O(log(N)), di mana N adalah jumlah key dalam indeks vektor. |
|
Deskripsi perintah |
Menyisipkan catatan data ke dalam indeks vektor. Jika catatan data dengan key tertentu sudah ada, catatan yang ada akan ditimpa. |
|
Parameter |
|
|
Nilai kembali |
|
|
Contoh |
Contoh perintah:
Contoh output:
|
TVS.HGETALL
|
Item |
Deskripsi |
|
Sintaks |
|
|
Kompleksitas waktu |
O(1) |
|
Deskripsi perintah |
Mengambil semua atribut dan nilai catatan data untuk key tertentu dalam indeks vektor. |
|
Parameter |
|
|
Nilai kembali |
|
|
Contoh |
Contoh perintah:
Contoh output:
|
TVS.HMGET
|
Item |
Deskripsi |
|
Sintaks |
|
|
Kompleksitas waktu |
O(1) |
|
Deskripsi perintah |
Mengembalikan nilai kunci atribut tertentu untuk key tertentu dalam indeks vektor. |
|
Parameter |
|
|
Mengembalikan |
|
|
Contoh |
Contoh perintah:
Contoh output:
|
TVS.DEL
|
Item |
Deskripsi |
|
Sintaks |
|
|
Kompleksitas waktu |
O(1) |
|
Deskripsi perintah |
Menghapus catatan data (key) tertentu dari indeks vektor tertentu. |
|
Parameter |
|
|
Nilai kembali |
|
|
Contoh |
Contoh perintah:
Contoh output:
|
TVS.HDEL
|
Item |
Deskripsi |
|
Sintaks |
|
|
Kompleksitas waktu |
O(1) |
|
Deskripsi perintah |
Menghapus satu atau beberapa kunci atribut dan nilainya dari catatan (key) dalam indeks vektor. |
|
Parameter |
|
|
Nilai kembali |
|
|
Contoh |
Contoh perintah:
Contoh output:
|
TVS.SCAN
|
Kategori |
Deskripsi |
|
Sintaks |
|
|
Kompleksitas waktu |
O(N), di mana N adalah jumlah key dalam indeks vektor. |
|
Deskripsi perintah |
Memindai catatan data (diidentifikasi oleh key) yang memenuhi kondisi tertentu dalam indeks vektor tertentu. |
|
Parameter |
|
|
Nilai kembali |
|
|
Contoh |
Contoh perintah:
Contoh nilai kembali:
|
TVS.HINCRBY
|
Kategori |
Deskripsi |
|
Sintaks |
|
|
Kompleksitas waktu |
O(1) |
|
Deskripsi perintah |
Menambah nilai integer dari Jika |
|
Parameter |
|
|
Nilai kembali |
|
|
Contoh |
Contoh perintah:
Contoh output:
|
TVS.HINCRBYFLOAT
|
Kategori |
Deskripsi |
|
Sintaks |
|
|
Kompleksitas waktu |
O(1) |
|
Deskripsi perintah |
Menambah nilai Jika |
|
Parameter |
|
|
Nilai kembali |
|
|
Contoh |
Contoh perintah:
Contoh output:
|
TVS.HPEXPIREAT
|
Kategori |
Deskripsi |
|
Sintaks |
|
|
Kompleksitas waktu |
O(1) |
|
Deskripsi perintah |
Menetapkan waktu kedaluwarsa absolut dalam milidetik untuk catatan data, diidentifikasi oleh key-nya, dalam indeks vektor tertentu. |
|
Parameter |
|
|
Nilai kembali |
|
|
Contoh |
Contoh perintah:
Contoh output:
|
TVS.HPEXPIRE
|
Item |
Deskripsi |
|
Sintaks |
|
|
Kompleksitas waktu |
O(1) |
|
Deskripsi perintah |
Menetapkan waktu kedaluwarsa relatif dalam milidetik untuk key tertentu dalam indeks vektor. |
|
Parameter |
|
|
Nilai kembali |
|
|
Contoh |
Contoh perintah:
Contoh output:
|
TVS.HEXPIREAT
|
Kategori |
Deskripsi |
|
Sintaks |
|
|
Kompleksitas waktu |
O(1) |
|
Deskripsi perintah |
Menetapkan waktu kedaluwarsa absolut untuk key tertentu dalam indeks vektor, akurat hingga detik. |
|
Opsi |
|
|
Nilai kembali |
|
|
Contoh |
Contoh perintah:
Contoh output:
|
TVS.HEXPIRE
|
Kategori |
Deskripsi |
|
Sintaks |
|
|
Kompleksitas waktu |
O(1) |
|
Deskripsi perintah |
Menetapkan waktu kedaluwarsa relatif dalam detik untuk vektor (key) tertentu dalam indeks vektor. |
|
Parameter |
|
|
Output |
|
|
Contoh |
Contoh perintah:
Contoh output:
|
TVS.HPTTL
|
Kategori |
Deskripsi |
|
Sintaks |
|
|
Kompleksitas waktu |
O(1) |
|
Deskripsi perintah |
Mengembalikan TTL, dalam milidetik, untuk catatan data (key) tertentu dalam indeks vektor. |
|
Parameter |
|
|
Nilai kembali |
|
|
Contoh |
Contoh perintah:
Contoh output:
|
TVS.HTTL
|
Kategori |
Deskripsi |
|
Sintaks |
|
|
Kompleksitas waktu |
O(1) |
|
Deskripsi perintah |
Mengambil TTL dalam detik untuk catatan data (key) tertentu dalam indeks vektor tertentu. |
|
Parameter |
|
|
Nilai kembali |
|
|
Contoh |
Contoh perintah:
Contoh output:
|
TVS.HPEXPIRETIME
|
Kategori |
Deskripsi |
|
Sintaks |
|
|
Kompleksitas waktu |
O(1) |
|
Deskripsi perintah |
Mengembalikan waktu kedaluwarsa absolut catatan data (key) tertentu dalam indeks vektor, sebagai stempel waktu Unix dalam milidetik. |
|
Parameter |
|
|
Nilai kembali |
|
|
Contoh |
Contoh perintah:
Contoh output:
|
TVS.HEXPIRETIME
|
Item |
Deskripsi |
|
Sintaks |
|
|
Kompleksitas waktu |
O(1) |
|
Deskripsi perintah |
Mengembalikan waktu kedaluwarsa absolut catatan data (key) tertentu dalam indeks vektor sebagai stempel waktu Unix dalam detik. |
|
Parameter |
|
|
Output |
|
|
Contoh |
Contoh perintah:
Contoh output:
|
TVS.KNNSEARCH
|
Item |
Deskripsi |
|
Sintaks |
|
|
Kompleksitas waktu |
N adalah jumlah key dalam indeks vektor. |
|
Deskripsi perintah |
Menjalankan kueri tetangga terdekat untuk vektor tertentu dalam indeks vektor dan mengembalikan hingga topN hasil. |
|
Parameter |
|
|
Nilai kembali |
|
|
Contoh |
Jalankan perintah berikut terlebih dahulu:
Contoh 1:
Respons 1:
Contoh 2:
Respons 2:
|
TVS.KNNSEARCHFIELD
|
Item |
Deskripsi |
|
Sintaks |
|
|
Kompleksitas waktu |
N adalah jumlah key dalam indeks vektor. |
|
Deskripsi perintah |
Mencari tetangga terdekat vektor tertentu dalam indeks vektor. Logika pencarian identik dengan TVS.KNNSEARCH, tetapi perintah ini juga mengembalikan atribut tag. |
|
Parameter |
|
|
Nilai kembali |
|
|
Contoh |
Jalankan perintah berikut terlebih dahulu:
Contoh perintah:
Contoh output:
|
TVS.GETDISTANCE
|
Item |
Deskripsi |
|
Sintaks |
|
|
Kompleksitas waktu |
N adalah jumlah key dalam indeks vektor. |
|
Deskripsi perintah |
Menemukan tetangga terdekat dari vektor kueri dari daftar key tertentu dalam indeks vektor. |
|
Parameter |
|
|
Output |
|
|
Contoh |
Jalankan perintah berikut terlebih dahulu:
Contoh perintah:
Contoh output:
|
TVS.MKNNSEARCH
|
Item |
Deskripsi |
|
Sintaks |
|
|
Kompleksitas waktu |
N adalah jumlah key dalam indeks vektor. |
|
Deskripsi perintah |
Menjalankan pencarian tetangga terdekat batch untuk beberapa vektor dalam indeks vektor tertentu. |
|
Parameter |
|
|
Nilai kembali |
|
|
Contoh |
Jalankan perintah berikut terlebih dahulu:
Contoh perintah:
Contoh output:
|
TVS.MINDEXKNNSEARCH
|
Item |
Deskripsi |
|
Sintaks |
|
|
Kompleksitas waktu |
N adalah jumlah key dalam indeks vektor. |
|
Deskripsi perintah |
Mencari tetangga terdekat vektor tertentu di beberapa indeks vektor. |
|
Parameter |
|
|
Output |
|
|
Contoh |
Jalankan perintah ini terlebih dahulu:
Contoh perintah:
Contoh output:
|
TVS.MINDEXKNNSEARCHFIELD
|
Kategori |
Deskripsi |
|
Sintaks |
|
|
Kompleksitas waktu |
N adalah jumlah key dalam indeks vektor. |
|
Deskripsi perintah |
Menjalankan kueri tetangga terdekat untuk vektor tertentu di beberapa indeks vektor dan secara opsional mengembalikan tag. |
|
Parameter |
|
|
Output |
|
|
Contoh |
Jalankan perintah berikut terlebih dahulu:
Contoh perintah:
Contoh output:
|
TVS.MINDEXMKNNSEARCH
|
Item |
Deskripsi |
|
Sintaks |
|
|
Kompleksitas waktu |
N mewakili jumlah key dalam indeks vektor. |
|
Deskripsi perintah |
Mencari beberapa indeks vektor untuk tetangga terdekat dari beberapa vektor. |
|
Parameter |
|
|
Nilai kembali |
|
|
Contoh |
Jalankan perintah ini terlebih dahulu:
Contoh perintah:
Contoh output:
|