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

milvus-logo
LFAI
  • Home
  • Blog
  • Bagaimana Cara Memadatkan Data di Milvus?

Bagaimana Cara Memadatkan Data di Milvus?

  • Engineering
February 21, 2022
Bingyi Sun

Binlog Cover Image Gambar Sampul Binlog

Oleh Bingyi Sun dan Angela Ni.

Dengan dirilisnya Milvus 2.0 GA secara resmi, sejumlah fitur baru telah didukung. Di antaranya, pemadatan adalah salah satu fitur baru yang dapat membantu Anda menghemat ruang penyimpanan.

Pemadatan mengacu pada proses penggabungan segmen kecil menjadi segmen besar dan membersihkan data yang terhapus secara logis. Dengan kata lain, pemadatan mengurangi penggunaan ruang disk dengan membersihkan entitas yang dihapus atau kedaluwarsa dalam binlog. Ini adalah tugas latar belakang yang dipicu oleh data coord dan dieksekusi oleh simpul data di Milvus.

Artikel ini membedah konsep dan implementasi pemadatan di Milvus.

Apa itu pemadatan?

Sebelum membahas lebih dalam tentang bagaimana mengimplementasikan pemadatan di Milvus 2.0, sangat penting untuk mengetahui apa itu pemadatan di Milvus.

Sering kali, sebagai pengguna Milvus, Anda mungkin merasa terganggu dengan penggunaan ruang hard disk yang semakin meningkat. Masalah lainnya adalah segmen dengan kurang dari 1.024 baris tidak diindeks dan hanya mendukung pencarian brute-force untuk memproses kueri. Segmen kecil yang disebabkan oleh flush otomatis atau flush yang diminta oleh pengguna dapat menghambat efisiensi kueri.

Oleh karena itu, untuk mengatasi dua masalah yang disebutkan di atas dan membantu mengurangi penggunaan disk serta meningkatkan efisiensi kueri, Milvus mendukung pemadatan.

Basis data seperti LevelDB dan RocksDB menambahkan data ke tabel string yang diurutkan (SSTables). Rata-rata pembacaan disk per kueri meningkat seiring dengan jumlah SSTables, yang menyebabkan kueri tidak efisien. Untuk mengurangi amplifikasi pembacaan dan membebaskan ruang hard drive, basis data ini memadatkan SSTables menjadi satu. Proses pemadatan berjalan di latar belakang secara otomatis.

Demikian pula, Milvus menambahkan data yang disisipkan dan dihapus ke binlog. Seiring bertambahnya jumlah binlog, semakin banyak ruang hard disk yang digunakan. Untuk membebaskan ruang hard disk, Milvus memadatkan binlog dari data yang dihapus dan disisipkan. Jika sebuah entitas disisipkan namun kemudian dihapus, maka entitas tersebut tidak lagi ada dalam binlog yang mencatat penyisipan atau penghapusan data setelah dipadatkan. Selain itu, Milvus juga memadatkan segmen - file data yang secara otomatis dibuat oleh Milvus untuk menampung data yang disisipkan.

Bagaimana cara mengkonfigurasi pemadatan?

Konfigurasi pemadatan di Milvus terutama melibatkan dua parameter: dataCoord.enableCompaction dan common.retentionDuration.

dataCoord.enableCompaction menentukan apakah akan mengaktifkan pemadatan. Nilai defaultnya adalah true.

common.retentionDuration menentukan periode ketika pemadatan tidak berjalan. Satuannya adalah detik. Ketika Anda memadatkan data, semua entitas yang dihapus tidak akan tersedia untuk pencarian dengan Penelusuran Waktu. Oleh karena itu, jika Anda berencana untuk mencari dengan Time Travel, Anda harus menentukan periode waktu di mana pemadatan tidak berjalan dan tidak memengaruhi data yang dihapus. Untuk memastikan hasil pencarian yang akurat dengan Time Travel, Milvus menyimpan data yang dioperasikan dalam periode yang ditentukan oleh common.retentionDuration. Artinya, data yang dioperasikan dalam periode ini tidak akan dipadatkan. Untuk lebih jelasnya, lihat Mencari dengan Perjalanan Waktu.

Pemadatan diaktifkan di Milvus secara default. Jika Anda menonaktifkan pemadatan tetapi kemudian ingin mengaktifkannya secara manual, Anda dapat mengikuti langkah-langkah di bawah ini:

  1. Panggil metode collection.compact() untuk memicu proses pemadatan global secara manual. Namun, harap dicatat bahwa operasi ini mungkin membutuhkan waktu yang lama.
  2. Setelah memanggil metode tersebut, ID pemadatan akan dikembalikan. Lihat status pemadatan dengan memanggil metode collection.get_compaction_state().

Setelah pemadatan diaktifkan, pemadatan akan berjalan di latar belakang secara otomatis. Karena proses pemadatan mungkin membutuhkan waktu lama, permintaan pemadatan diproses secara asinkron untuk menghemat waktu.

Bagaimana cara menerapkan pemadatan?

Di Milvus, Anda dapat mengimplementasikan pemadatan secara manual atau otomatis.

Pemadatan binlog atau segmen secara manual tidak memerlukan pemenuhan kondisi pemicu. Oleh karena itu, jika Anda menggunakan pemadatan secara manual, binlog atau segmen akan dipadatkan apa pun yang terjadi.

Namun, jika Anda ingin mengaktifkan pemadatan otomatis, kondisi pemicu pemadatan tertentu harus dipenuhi agar sistem dapat memadatkan segmen atau binlog Anda.

Secara umum, ada dua jenis objek yang dapat dipadatkan di Milvus: binglog dan segmen.

Pemadatan binlog

Binlog adalah log biner, atau unit yang lebih kecil dalam segmen, yang mencatat dan menangani pembaruan dan perubahan yang dilakukan pada data dalam database vektor Milvus. Data dari sebuah segmen disimpan dalam beberapa binlog. Pemadatan binlog melibatkan dua jenis binlog di Milvus: binlog sisipan dan binlog delta.

Delta binlog dihasilkan ketika data dihapus, sementara insert binlog dihasilkan dalam tiga keadaan berikut.

  • Ketika data yang disisipkan ditambahkan, segmen mencapai batas atas ukuran dan secara otomatis dibuang ke disk.
  • DataCoord secara otomatis mengosongkan segmen yang tidak disegel dalam waktu yang lama.
  • Beberapa API seperti collection.num_entities, collection.load(), dan banyak lagi secara otomatis memanggil flush untuk menulis segmen ke disk.

Oleh karena itu, pemadatan binlog, seperti namanya, mengacu pada pemadatan binlog di dalam sebuah segmen. Lebih khusus lagi, selama pemadatan binlog, semua binlog delta dan binlog sisipan yang tidak dipertahankan akan dipadatkan.

Binlog compaction Pemadatan binlog

Ketika sebuah segmen di-flush ke disk, atau ketika Milvus meminta pemadatan global karena pemadatan tidak berjalan dalam waktu yang lama, setidaknya satu dari dua kondisi berikut ini harus dipenuhi untuk memicu pemadatan otomatis:

  1. Baris dalam delta binlog lebih dari 20% dari total baris.
  2. Ukuran delta binlog melebihi 10 MB.

Pemadatan segmen

Segmen adalah file data yang secara otomatis dibuat oleh Milvus untuk menampung data yang disisipkan. Ada dua jenis segmen dalam Milvus: segmen yang berkembang dan segmen tertutup.

Segmen yang sedang berkembang terus menerima data yang baru disisipkan hingga disegel. Segmen tertutup tidak lagi menerima data baru, dan akan dibuang ke penyimpanan objek, sehingga data baru dapat disisipkan ke dalam segmen tumbuh yang baru dibuat.

Oleh karena itu, pemadatan segmen mengacu pada pemadatan beberapa segmen yang disegel. Lebih khusus lagi, selama pemadatan segmen, segmen kecil dipadatkan menjadi segmen yang lebih besar.

Segment compaction Pemadatan segmen

Setiap segmen yang dihasilkan setelah pemadatan tidak dapat melebihi batas atas ukuran segmen, yaitu 512 MB secara default. Baca konfigurasi sistem untuk mempelajari cara memodifikasi batas atas ukuran segmen.

Ketika sebuah segmen di-flash ke disk, atau ketika Milvus meminta pemadatan global karena pemadatan tidak berjalan dalam waktu yang lama, kondisi berikut ini perlu dipenuhi untuk memicu pemadatan otomatis:

  • Segmen yang lebih kecil dari 0,5 * MaxSegmentSize lebih dari 10.

Apa selanjutnya?

Apa selanjutnya setelah mempelajari dasar-dasar pemadatan di Milvus? Saat ini, tidak semua parameter untuk mengkonfigurasi pemadatan ada di file milvus.yaml, dan strategi pembuatan rencana masih sangat sederhana. Datang dan berkontribusi pada Milvus, proyek sumber terbuka jika Anda tertarik!

Selain itu, dalam blog seri fitur baru 2.0, kami bertujuan untuk menjelaskan desain dari fitur-fitur baru. Baca lebih lanjut dalam seri blog ini!

Tentang penulis

Bingyi Sun, Senior Software Engineer dari proyek Milvus, meraih gelar Master di bidang rekayasa perangkat lunak di Shanghai Jiao Tong University. Dia bertanggung jawab untuk mengembangkan komponen terkait penyimpanan di Milvus 2.0. Bidang yang diminatinya adalah basis data dan sistem terdistribusi. Dia adalah penggemar berat proyek open source dan seorang gourmet yang suka bermain video game dan membaca di waktu luangnya.

Like the article? Spread the word

Terus Baca