🚀 Coba Zilliz Cloud, Milvus yang sepenuhnya terkelola, secara gratis—rasakan performa 10x lebih cepat! Coba Sekarang>>

milvus-logo
LFAI
  • Home
  • Blog
  • Memahami Tingkat Konsistensi dalam Basis Data Vektor Milvus - Bagian II

Memahami Tingkat Konsistensi dalam Basis Data Vektor Milvus - Bagian II

  • Engineering
September 13, 2022
Jiquan Long

Cover_image 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 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.

timetick 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.

execute_immediately 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.

wait_search 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.

guarantee_ts 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 sebagai GuaranteeTs 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.

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:

Like the article? Spread the word

Terus Baca