Memahami Tingkat Konsistensi dalam Basis Data Vektor Milvus - Bagian II
Gambar sampul
Artikel ini ditulis oleh Jiquan Long dan diterjemahkan oleh Angela Ni.
Dalam blog sebelumnya tentang konsistensi, kami telah menjelaskan apa yang dimaksud dengan konsistensi dalam basis data vektor terdistribusi, membahas empat tingkat konsistensi - kuat, basi, sesi, dan akhirnya didukung dalam basis data vektor Milvus, dan menjelaskan skenario aplikasi yang paling cocok untuk setiap tingkat konsistensi.
Dalam tulisan ini, kami akan terus memeriksa mekanisme di balik yang memungkinkan pengguna database vektor Milvus untuk secara fleksibel memilih tingkat konsistensi yang ideal untuk berbagai skenario aplikasi. Kami juga akan memberikan tutorial dasar tentang cara menyetel tingkat konsistensi dalam database vektor Milvus.
Langsung ke:
- Mekanisme centang waktu yang mendasari
- Stempel waktu jaminan
- Tingkat konsistensi
- Bagaimana cara menyetel tingkat konsistensi di Milvus?
Mekanisme time tick yang mendasari
Milvus menggunakan mekanisme time tick untuk memastikan tingkat konsistensi yang berbeda ketika pencarian atau kueri vektor dilakukan. Time Tick adalah tanda air Milvus yang bertindak seperti jam di Milvus dan menandakan pada titik waktu mana sistem Milvus berada. Setiap kali ada permintaan bahasa manipulasi data (DML) yang dikirim ke basis data vektor Milvus, Milvus akan memberikan cap waktu pada permintaan tersebut. Seperti yang ditunjukkan pada gambar di bawah ini, ketika data baru dimasukkan ke dalam antrean pesan misalnya, Milvus tidak hanya menandai stempel waktu pada data yang dimasukkan ini, tetapi juga menyisipkan tanda waktu pada interval yang teratur.
tanda waktu
Mari kita ambil syncTs1
pada gambar di atas sebagai contoh. Ketika konsumen hilir seperti node kueri melihat syncTs1
, komponen konsumen memahami bahwa semua data yang disisipkan lebih awal dari syncTs1
telah dikonsumsi. Dengan kata lain, permintaan penyisipan data yang nilai timestamp-nya lebih kecil dari syncTs1
tidak akan muncul lagi dalam antrean pesan.
Menjamin Stempel Waktu
Seperti yang telah disebutkan pada bagian sebelumnya, komponen konsumen hilir seperti node kueri secara terus menerus mendapatkan pesan permintaan penyisipan data dan time tick dari antrean pesan. Setiap kali sebuah time tick dikonsumsi, node kueri akan menandai time tick yang dikonsumsi ini sebagai waktu yang dapat digunakan - ServiceTime
dan semua data yang disisipkan sebelum ServiceTime
dapat dilihat oleh node kueri.
Selain ServiceTime
, Milvus juga mengadopsi jenis stempel waktu - stempel waktu jaminan (GuaranteeTS
) untuk memenuhi kebutuhan akan berbagai tingkat konsistensi dan ketersediaan oleh pengguna yang berbeda. Ini berarti bahwa pengguna basis data vektor Milvus dapat menentukan GuaranteeTs
untuk menginformasikan kepada simpul kueri bahwa semua data sebelum GuaranteeTs
harus terlihat dan dilibatkan ketika pencarian atau kueri dilakukan.
Biasanya ada dua skenario ketika simpul kueri mengeksekusi permintaan pencarian di basis data vektor Milvus.
Skenario 1: Jalankan permintaan pencarian dengan segera
Seperti yang ditunjukkan pada gambar di bawah ini, jika GuaranteeTs
lebih kecil dari ServiceTime
, simpul kueri dapat mengeksekusi permintaan pencarian dengan segera.
mengeksekusi_dengan_segera
Skenario 2: Tunggu hingga "ServiceTime > GuaranteeTs"
Jika GuaranteeTs
lebih besar dari ServiceTime
, node kueri harus terus mengkonsumsi centang waktu dari antrean pesan. Permintaan pencarian tidak dapat dieksekusi sampai ServiceTime
lebih besar dari GuaranteeTs
.
tunggu_pencarian
Tingkat Konsistensi
Oleh karena itu, GuaranteeTs
dapat dikonfigurasi dalam permintaan pencarian untuk mencapai tingkat konsistensi yang Anda tentukan. GuaranteeTs
dengan nilai besar memastikan konsistensi yang kuat dengan mengorbankan latensi pencarian yang tinggi. Dan GuaranteeTs
dengan nilai kecil mengurangi latensi pencarian tetapi visibilitas data terganggu.
GuaranteeTs
di Milvus adalah format stempel waktu hibrida. Dan pengguna tidak mengetahui TSO di dalam Milvus. Oleh karena itu, menentukan nilaiGuaranteeTs
adalah tugas yang terlalu rumit bagi pengguna. Untuk menghemat masalah bagi pengguna dan memberikan pengalaman pengguna yang optimal, Milvus hanya mengharuskan pengguna untuk memilih tingkat konsistensi tertentu, dan basis data vektor Milvus akan secara otomatis menangani nilai GuaranteeTs
untuk pengguna. Dengan kata lain, pengguna Milvus hanya perlu memilih dari empat tingkat konsistensi: Strong
, Bounded
, Session
, dan Eventually
. Dan masing-masing tingkat konsistensi sesuai dengan nilai GuaranteeTs
tertentu.
Gambar di bawah ini mengilustrasikan GuaranteeTs
untuk masing-masing dari empat tingkat konsistensi dalam basis data vektor Milvus.
jaminan_ts
Basis data vektor Milvus mendukung empat tingkat konsistensi:
CONSISTENCY_STRONG
:GuaranteeTs
disetel ke nilai yang sama dengan stempel waktu sistem terbaru, dan simpul kueri menunggu hingga waktu layanan berlanjut ke stempel waktu sistem terbaru untuk memproses permintaan pencarian atau kueri.CONSISTENCY_EVENTUALLY
GuaranteeTs
disetel ke nilai yang jauh lebih kecil daripada stempel waktu sistem terbaru untuk melewatkan pemeriksaan konsistensi. Node kueri langsung mencari pada tampilan data yang ada.CONSISTENCY_BOUNDED
:GuaranteeTs
diatur ke nilai yang relatif lebih kecil dari stempel waktu sistem terbaru, dan simpul kueri mencari pada tampilan data yang kurang diperbarui.CONSISTENCY_SESSION
: Klien menggunakan stempel waktu dari operasi penulisan terakhir sebagaiGuaranteeTs
sehingga setiap klien setidaknya dapat mengambil data yang dimasukkan dengan sendirinya.
Bagaimana cara menyetel tingkat konsistensi di Milvus?
Milvus mendukung penyetelan tingkat konsistensi ketika membuat koleksi atau melakukan pencarian atau kueri.
Melakukan pencarian kemiripan vektor
Untuk melakukan pencarian kemiripan vektor dengan tingkat konsistensi yang Anda inginkan, cukup atur nilai untuk parameter consistency_level
sebagai Strong
, Bounded
, Session
, atau Eventually
. Jika Anda tidak mengatur nilai untuk parameter consistency_level
, tingkat konsistensi akan menjadi Bounded
secara default. Contoh ini melakukan pencarian kemiripan vektor dengan konsistensi Strong
.
results = collection.search(
data=[[0.1, 0.2]],
anns_field="book_intro",
param=search_params,
limit=10,
expr=None,
consistency_level="Strong"
)
Melakukan kueri vektor
Mirip dengan melakukan pencarian kemiripan vektor, Anda dapat menentukan nilai untuk parameter consistency_level
saat melakukan kueri vektor. Contoh melakukan kueri vektor dengan konsistensi Strong
.
res = collection.query(
expr = "book_id in [2,4,6,8]",
output_fields = ["book_id", "book_intro"],
consistency_level="Strong"
)
Apa selanjutnya
Dengan rilis resmi Milvus 2.1, kami telah menyiapkan serangkaian blog yang memperkenalkan fitur-fitur baru. Baca lebih lanjut dalam seri blog ini:
- Cara Menggunakan Data String untuk Memberdayakan Aplikasi Pencarian Kemiripan Anda
- Menggunakan Milvus yang Disematkan untuk Menginstal dan Menjalankan Milvus secara Instan dengan Python
- Tingkatkan Throughput Pembacaan Basis Data Vektor Anda dengan Replika Dalam Memori
- Memahami Tingkat Konsistensi dalam Basis Data Vektor Milvus
- Memahami Tingkat Konsistensi dalam Basis Data Vektor Milvus (Bagian II)
- Bagaimana Basis Data Vektor Milvus Memastikan Keamanan Data?
- Mekanisme time tick yang mendasari
- Menjamin Stempel Waktu
- Tingkat Konsistensi
- Bagaimana cara menyetel tingkat konsistensi di Milvus?
- Apa selanjutnya
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word