Cap waktu
Topik ini menjelaskan konsep cap waktu dan memperkenalkan empat parameter utama terkait cap waktu dalam basis data vektor Milvus.
Ikhtisar
Milvus adalah basis data vektor yang dapat mencari dan menanyakan vektor yang dikonversi dari data yang tidak terstruktur. Ketika melakukan operasi bahasa manipulasi data (DML), termasuk penyisipan dan penghapusan data, Milvus memberikan stempel waktu ke entitas yang terlibat dalam operasi. Oleh karena itu, semua entitas di Milvus memiliki atribut stempel waktu. Dan kumpulan entitas dalam operasi DML yang sama memiliki nilai stempel waktu yang sama.
Parameter stempel waktu
Beberapa parameter terkait cap waktu dilibatkan ketika Anda melakukan pencarian atau kueri kemiripan vektor di Milvus.
Guarantee_timestamp
Service_timestamp
Graceful_time
Travel_timestamp
Guarantee_timestamp
Guarantee_timestamp
adalah jenis cap waktu yang digunakan untuk memastikan bahwa semua pembaruan data oleh operasi DML sebelum Guarantee_timestamp
terlihat ketika pencarian atau kueri kemiripan vektor dilakukan. Sebagai contoh, jika Anda memasukkan satu kumpulan data pada pukul 3 sore, kumpulan data lainnya pada pukul 5 sore, dan nilai Guarantee_timestamp
ditetapkan sebagai pukul 6 sore saat pencarian kemiripan vektor. Ini berarti bahwa dua kumpulan data yang dimasukkan pada pukul 3 sore dan 5 sore harus dilibatkan dalam pencarian.
Jika Guarantee_timestamp
tidak dikonfigurasi, Milvus secara otomatis mengambil titik waktu ketika permintaan pencarian dibuat. Oleh karena itu, pencarian dilakukan pada tampilan data dengan semua pembaruan data oleh operasi DML sebelum pencarian.
Untuk menghemat waktu Anda dalam memahami TSO di dalam Milvus, sebagai pengguna, Anda tidak perlu mengkonfigurasi secara langsung parameter Guarantee_timestamp
. Anda hanya perlu memilih tingkat konsistensi, dan Milvus secara otomatis menangani parameter Guarantee_timestamp
untuk Anda. Setiap tingkat konsistensi sesuai dengan nilai Guarantee_timestamp
tertentu.
Guarantee_Timestamp.
Contoh
Seperti yang ditunjukkan pada ilustrasi di atas, nilai Guarantee_timestamp
ditetapkan sebagai 2021-08-26T18:15:00
(untuk mempermudah, stempel waktu pada contoh ini diwakili oleh waktu fisik). Saat Anda melakukan pencarian atau kueri, semua data sebelum 2021-08-26T18:15:00 akan dicari atau ditanyakan.
Service_timestamp
Service_timestamp
adalah jenis stempel waktu yang secara otomatis dibuat dan dikelola oleh node kueri di Milvus. Ini digunakan untuk menunjukkan operasi DML mana yang dijalankan oleh node kueri.
Data yang dikelola oleh node kueri dapat dikategorikan ke dalam dua jenis:
Data historis (atau juga disebut data batch)
Data tambahan (atau disebut juga data streaming).
Di Milvus, Anda perlu memuat data sebelum melakukan pencarian atau kueri. Oleh karena itu, data batch dalam koleksi dimuat oleh simpul kueri sebelum permintaan pencarian atau kueri dibuat. Namun, data streaming dimasukkan ke dalam atau dihapus dari Milvus dengan cepat, yang mengharuskan simpul kueri untuk menyimpan garis waktu operasi DML dan permintaan pencarian atau kueri. Akibatnya, node kueri menggunakan Service_timestamp
untuk menyimpan garis waktu tersebut. Service_timestamp
dapat dilihat sebagai titik waktu ketika data tertentu terlihat karena node kueri dapat memastikan bahwa semua operasi DML sebelum Service_timestamp
telah selesai.
Ketika ada permintaan pencarian atau kueri yang masuk, node kueri membandingkan nilai Service_timestamp
dan Guarantee_timestamp
. Terutama ada dua skenario.
Stempel Waktu Layanan.
Skenario 1: Service_timestamp
>= Guarantee_timestamp
Seperti yang ditunjukkan pada gambar 1, nilai Guarantee_timestamp
ditetapkan sebagai 2021-08-26T18:15:00
. Ketika nilai Service_timestamp
bertambah menjadi 2021-08-26T18:15:01
, ini berarti bahwa semua operasi DML sebelum titik waktu ini dieksekusi dan diselesaikan oleh node kueri, termasuk operasi DML sebelum waktu yang ditunjukkan oleh Guarantee_timestamp
. Hasilnya, permintaan pencarian atau permintaan kueri dapat dieksekusi dengan segera.
Skenario 2: Service_timestamp
< Guarantee_timestamp
Seperti yang ditunjukkan pada gambar 2, nilai Guarantee_timestamp
ditetapkan sebagai 2021-08-26T18:15:00
, dan nilai Service_timestamp
saat ini hanya 2021-08-26T18:14:55
. Ini berarti bahwa hanya operasi DML sebelum 2021-08-26T18:14:55
yang dieksekusi dan diselesaikan, meninggalkan bagian dari operasi DML setelah titik waktu ini tetapi sebelum Guarantee_timestamp
yang belum selesai. Jika pencarian atau kueri dieksekusi pada titik ini, beberapa data yang diperlukan tidak terlihat dan belum tersedia, yang secara serius memengaruhi keakuratan hasil pencarian atau kueri. Oleh karena itu, simpul kueri perlu menunda permintaan pencarian atau kueri hingga operasi DML sebelum guarantee_timestamp
selesai (yaitu ketika Service_timestamp
>= Guarantee_timestamp
).
Graceful_time
Secara teknis, Graceful_time
bukanlah cap waktu, melainkan periode waktu (misalnya 100ms). Namun, Graceful_time
layak disebut karena sangat terkait dengan Guarantee_timestamp
dan Service_timestamp
. Graceful_time
adalah parameter yang dapat dikonfigurasi dalam file konfigurasi Milvus. Parameter ini digunakan untuk menunjukkan periode waktu yang dapat ditoleransi sebelum data tertentu terlihat. Singkatnya, operasi DML yang belum selesai selama Graceful_time
dapat ditoleransi.
Ketika ada permintaan pencarian atau permintaan kueri yang masuk, ada dua skenario.
Graceful_Time.
Skenario 1: Service_timestamp
+ Graceful_time
>= Guarantee_timestamp
Seperti yang ditunjukkan pada gambar 1, nilai Guarantee_timestamp
ditetapkan sebagai 2021-08-26T18:15:01
, dan Graceful_time
sebagai 2s
. Nilai Service_timestamp
bertambah menjadi 2021-08-26T18:15:00
. Meskipun nilai Service_timestamp
masih lebih kecil daripada Guarantee_timestamp
dan tidak semua operasi DML sebelum 2021-08-26T18:15:01
selesai, periode ketidaktampakan data selama 2 detik masih dapat ditoleransi seperti yang ditunjukkan oleh nilai Graceful_time
. Oleh karena itu, permintaan pencarian atau permintaan kueri yang masuk dapat segera dieksekusi.
Skenario 2: Service_timestamp
+ Graceful_time
< Guarantee_timestamp
Seperti yang ditunjukkan pada gambar 2, nilai Guarantee_timestamp
ditetapkan sebagai 2021-08-26T18:15:01
, dan Graceful_time
sebagai 2s
. Nilai saat ini dari Service_timestamp
hanya 2021-08-26T18:14:54
. Ini berarti bahwa operasi DML yang diharapkan belum selesai dan bahkan dengan adanya waktu tenggang 2 detik, ketidaktampakan data masih tidak dapat ditoleransi. Oleh karena itu, simpul kueri perlu menunda pencarian atau permintaan kueri hingga permintaan DML tertentu selesai (yaitu ketika Service_timestamp
+ Graceful_time
>= Guarantee_timestamp
).
Apa selanjutnya
- Pelajari bagaimana cap waktu jaminan memungkinkan konsistensi yang dapat disetel di Milvus