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

milvus-logo
LFAI
  • Home
  • Blog
  • Strategi penghapusan sebelumnya dan masalah terkait

Strategi penghapusan sebelumnya dan masalah terkait

  • Engineering
December 18, 2019
Yihua Mo

penulis Yihua Mo

Tanggal: 2019-12-18

Dalam Mengelola Data di Mesin Pencari Vektor Skala Besar, kami menyebutkan mekanisme penghapusan file data. Hapus termasuk hapus lunak dan hapus keras. Setelah melakukan operasi hapus pada sebuah tabel, tabel tersebut ditandai dengan hapus lunak. Operasi pencarian atau pembaruan setelah itu tidak lagi diperbolehkan. Namun, operasi kueri yang dimulai sebelum delete masih dapat berjalan. Tabel benar-benar dihapus bersama dengan metadata dan file lainnya hanya ketika operasi kueri selesai.

Jadi, kapan file yang ditandai dengan soft-delete benar-benar dihapus? Sebelum 0.6.0, strateginya adalah file benar-benar dihapus setelah soft-delete selama 5 menit. Gambar berikut ini menampilkan strategi tersebut:

5mins 5 menit

Strategi ini didasarkan pada premis bahwa kueri biasanya tidak berlangsung lebih dari 5 menit dan tidak dapat diandalkan. Jika kueri berlangsung lebih dari 5 menit, kueri akan gagal. Alasannya adalah ketika kueri dimulai, Milvus mengumpulkan informasi tentang file yang dapat dicari dan membuat tugas kueri. Kemudian, penjadwal kueri memuat file ke memori satu per satu dan mencari file satu per satu. Jika file tidak lagi ada saat memuat file, kueri akan gagal.

Memperpanjang waktu dapat membantu mengurangi risiko kegagalan kueri, tetapi juga menyebabkan masalah lain: penggunaan disk terlalu besar. Alasannya adalah ketika sejumlah besar vektor dimasukkan, Milvus terus menggabungkan file data dan file gabungan tidak segera dihapus dari disk, meskipun tidak ada kueri yang terjadi. Jika penyisipan data terlalu cepat dan/atau jumlah data yang disisipkan terlalu besar, penggunaan disk tambahan dapat mencapai puluhan GB. Lihat gambar berikut ini sebagai contoh:

result hasil

Seperti yang ditunjukkan pada gambar sebelumnya, kumpulan data pertama yang disisipkan (insert_1) dibuang ke disk dan menjadi file_1, kemudian insert_2 menjadi file_2. Thread yang bertanggung jawab atas kombinasi file menggabungkan file-file tersebut menjadi file_3. Kemudian, file_1 dan file_2 ditandai sebagai soft-delete. Kumpulan data sisipan ketiga menjadi file_4. Thread menggabungkan file_3 dan file_4 ke file_5 dan menandai file_3 dan file_4 sebagai soft-delete.

Demikian juga, insert_6 dan insert_5 digabungkan. Pada t3, file_5 dan file_6 ditandai sebagai soft-delete. Antara t3 dan t4, meskipun banyak file yang ditandai sebagai soft-delete, file-file tersebut masih ada di dalam disk. File benar-benar dihapus setelah t4. Jadi, antara t3 dan t4, penggunaan disk adalah 64 + 64 + 128 + 64 + 196 + 64 + 256 = 836 MB. Data yang disisipkan adalah 64 + 64 + 64 + 64 = 256 MB. Penggunaan disk adalah 3 kali ukuran data yang dimasukkan. Semakin cepat kecepatan tulis disk, semakin tinggi penggunaan disk selama periode waktu tertentu.

Perbaikan strategi penghapusan di 0.6.0

Oleh karena itu, kami mengubah strategi untuk menghapus file di v0.6.0. Penghapusan keras tidak lagi menggunakan waktu sebagai pemicu. Sebagai gantinya, pemicunya adalah ketika file tidak digunakan oleh tugas apa pun.

newstrategy strategi baru

Asumsikan dua kumpulan vektor dimasukkan. Pada t1 permintaan kueri diberikan, Milvus mendapatkan dua berkas yang akan di-query (berkas_1 dan berkas_2, karena berkas_3 masih belum ada). Kemudian, thread backend mulai menggabungkan kedua berkas tersebut dengan kueri yang berjalan pada waktu yang sama. Ketika file_3 dihasilkan, file_1 dan file_2 ditandai sebagai soft-delete. Setelah kueri, tidak ada tugas lain yang akan menggunakan file_1 dan file_2, sehingga keduanya akan dihapus secara keras pada t4. Interval antara t2 dan t4 sangat kecil dan tergantung pada interval kueri. Dengan cara ini, berkas yang tidak terpakai akan dihapus pada waktunya.

Untuk implementasi internal, penghitungan referensi, yang sudah tidak asing lagi bagi para insinyur perangkat lunak, digunakan untuk menentukan apakah sebuah file dapat dihapus secara keras. Untuk menjelaskan dengan menggunakan perbandingan, ketika seorang pemain memiliki nyawa dalam sebuah permainan, dia masih bisa bermain. Ketika jumlah nyawa menjadi 0, permainan berakhir. Milvus memonitor status setiap file. Ketika sebuah file digunakan oleh sebuah tugas, sebuah nyawa akan ditambahkan ke file tersebut. Ketika file tidak lagi digunakan, satu nyawa akan dihapus dari file tersebut. Ketika sebuah file ditandai dengan hapus lunak dan jumlah nyawa adalah 0, file tersebut siap untuk dihapus secara keras.

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started

Like the article? Spread the word

Terus Baca