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

milvus-logo
LFAI
Beranda
  • Panduan Administrasi
    • Optimalisasi Penyimpanan
  • Home
  • Docs
  • Panduan Administrasi

  • Optimalisasi Penyimpanan

  • Pemadatan Pengelompokan

Pemadatan Pengelompokan

Pemadatan pengelompokan dirancang untuk meningkatkan kinerja pencarian dan mengurangi biaya dalam koleksi yang besar. Panduan ini akan membantu Anda memahami pemadatan pengelompokan dan bagaimana fitur ini dapat meningkatkan kinerja pencarian.

Ikhtisar

Milvus menyimpan entitas yang masuk dalam segmen di dalam koleksi dan menutup segmen jika sudah penuh. Jika hal ini terjadi, sebuah segmen baru dibuat untuk mengakomodasi entitas tambahan. Akibatnya, entitas didistribusikan secara acak di seluruh segmen. Distribusi ini mengharuskan Milvus untuk mencari beberapa segmen untuk menemukan tetangga terdekat dengan vektor kueri yang diberikan.

Without clustering Compaction Tanpa Pemadatan Pengelompokan

Jika Milvus dapat mendistribusikan entitas di antara segmen berdasarkan nilai di bidang tertentu, cakupan pencarian dapat dibatasi dalam satu segmen, sehingga meningkatkan kinerja pencarian.

Pemadatan Clustering adalah fitur di Milvus yang mendistribusikan kembali entitas di antara segmen dalam koleksi berdasarkan nilai dalam bidang skalar. Untuk mengaktifkan fitur ini, pertama-tama Anda harus memilih sebuah bidang skalar sebagai kunci pengelompokan. Hal ini memungkinkan Milvus untuk mendistribusikan ulang entitas ke dalam segmen ketika nilai kunci pengelompokannya berada dalam rentang tertentu. Ketika Anda memicu pemadatan pengelompokan, Milvus membuat/memperbaharui indeks global yang disebut PartitionStats, yang mencatat hubungan pemetaan antara segmen dan nilai kunci pengelompokan.

With Clustering Compaction Dengan Pemadatan Pengelompokan

Dengan menggunakan PartitionStats sebagai referensi, Milvus dapat memangkas data yang tidak relevan setelah menerima permintaan pencarian/kueri yang membawa nilai kunci pengelompokan dan membatasi cakupan pencarian dalam pemetaan segmen ke nilai tersebut, sehingga meningkatkan kinerja pencarian. Untuk detail tentang peningkatan kinerja, lihat Tes tolok ukur.

Gunakan Pemadatan Pengelompokan

Fitur Pemadatan Klaster di Milvus sangat mudah dikonfigurasi. Anda dapat memilih untuk memicunya secara manual atau mengaturnya untuk dipicu secara otomatis pada interval tertentu oleh Milvus. Untuk mengaktifkan pemadatan pengelompokan, lakukan hal berikut:

Konfigurasi Global

Anda perlu memodifikasi file konfigurasi Milvus Anda seperti yang ditunjukkan di bawah ini.

dataCoord:
  compaction:
    clustering:
      enable: true 
      autoEnable: false 
      triggerInterval: 600 
      minInterval: 3600 
      maxInterval: 259200 
      newDataSizeThreshold: 512m 
      timeout: 7200
     
queryNode:
  enableSegmentPrune: true 

datanode:
  clusteringCompaction:
    memoryBufferRatio: 0.1 
    workPoolSize: 8  
common:
  usePartitionKeyAsClusteringKey: true 
  • dataCoord.compaction.clustering

    Item KonfigurasiDeskripsiNilai Default
    enableMenentukan apakah akan mengaktifkan pemadatan pengelompokan.
    Setel ini ke true jika Anda perlu mengaktifkan fitur ini untuk setiap koleksi yang memiliki kunci pengelompokan.
    false
    autoEnableMenentukan apakah akan mengaktifkan pemadatan yang dipicu secara otomatis.
    Mengatur ini ke true mengindikasikan bahwa Milvus akan memadatkan koleksi yang memiliki kunci pengelompokan pada interval yang ditentukan.
    false
    triggerIntervalMenentukan interval dalam milidetik saat Milvus memulai pemadatan pengelompokan.
    Parameter ini hanya berlaku jika autoEnable diatur ke true.
    -
    minIntervalMenentukan interval minimum dalam detik.
    Parameter ini hanya berlaku jika autoEnable diatur ke true.
    Mengaturnya ke bilangan bulat yang lebih besar dari triggerInterval akan membantu menghindari pemadatan berulang dalam waktu singkat.
    -
    maxIntervalMenentukan interval maksimum dalam detik.
    Parameter ini hanya berlaku jika autoEnable diatur ke true.
    Ketika Milvus mendeteksi bahwa sebuah koleksi belum dipadatkan secara klaster untuk durasi yang lebih lama dari nilai ini, maka Milvus akan memaksa pemadatan klaster.
    -
    newDataSizeThresholdMenentukan ambang batas atas untuk memicu pemadatan pengelompokan.
    Parameter ini hanya berlaku jika autoEnable disetel ke true.
    Setelah Milvus mendeteksi bahwa volume data dalam koleksi melebihi nilai ini, Milvus akan memulai proses pemadatan pengelompokan.
    -
    timeoutMenentukan durasi batas waktu untuk pemadatan pengelompokan.
    Pemadatan clustering akan gagal jika waktu eksekusinya melebihi nilai ini.
    -
  • queryNode

    Item KonfigurasiDeskripsiNilai Default
    enableSegmentPruneMenentukan apakah Milvus memangkas data dengan merujuk ke PartitionStats saat menerima permintaan pencarian/kueri.
    Mengatur ini ke true memungkinkan Milvus memangkas data yang tidak relevan dari segmen selama permintaan pencarian/kueri.
    false
  • dataNode.clusteringCompaction

    Item KonfigurasiDeskripsiNilai Default
    memoryBufferRatioMenentukan rasio buffer memori untuk tugas pemadatan pengelompokan.
    Milvus akan memangkas data ketika ukuran data melebihi ukuran buffer yang dialokasikan yang dihitung menggunakan rasio ini.
    -
    workPoolSizeMenentukan ukuran kumpulan pekerja untuk tugas pemadatan pengelompokan.-
  • common

    Item KonfigurasiDeskripsiNilai Default
    usePartitionKeyAsClusteringKeyMenentukan apakah akan menggunakan kunci partisi dalam koleksi sebagai kunci pengelompokan.
    Mengatur ini ke true mengindikasikan bahwa kunci partisi digunakan sebagai kunci pengelompokan.
    Anda selalu dapat mengganti pengaturan ini dalam koleksi dengan mengatur kunci pengelompokan secara eksplisit.
    false

Untuk menerapkan perubahan di atas pada kluster Milvus Anda, silakan ikuti langkah-langkah di Konfigurasi Milvus dengan Helm dan Konfigurasi Milvus dengan Operator Milvus.

Konfigurasi Koleksi

Untuk pemadatan klaster dalam koleksi tertentu, Anda harus memilih sebuah bidang skalar dari koleksi sebagai kunci klaster.

default_fields = [
    FieldSchema(name="id", dtype=DataType.INT64, is_primary=True),
    FieldSchema(name="key", dtype=DataType.INT64, is_clustering_key=True),
    FieldSchema(name="var", dtype=DataType.VARCHAR, max_length=1000, is_primary=False),
    FieldSchema(name="embeddings", dtype=DataType.FLOAT_VECTOR, dim=dim)
]

default_schema = CollectionSchema(
    fields=default_fields, 
    description="test clustering-key collection"
)

coll1 = Collection(name="clustering_test", schema=default_schema)

Anda dapat menggunakan bidang skalar dari tipe data berikut ini sebagai kunci pengelompokan: Int8, Int16, Int32, Int64, Float, Double, dan VarChar.

Memicu Pemadatan Pengelompokan

Jika Anda telah mengaktifkan pemadatan pengelompokan otomatis, Milvus secara otomatis memicu pemadatan pada interval yang ditentukan. Atau, Anda dapat memicu pemadatan secara manual sebagai berikut:

coll1.compact(is_clustering=True)
coll1.get_compaction_state(is_clustering=True)
coll1.wait_for_compaction_completed(is_clustering=True)

Uji Tolok Ukur

Volume data dan pola kueri yang digabungkan menentukan peningkatan kinerja yang dapat dihasilkan oleh pemadatan klaster. Uji tolok ukur internal menunjukkan bahwa pemadatan pengelompokan menghasilkan peningkatan hingga 25 kali lipat dalam kueri per detik (QPS).

Uji tolok ukur dilakukan pada koleksi yang berisi entitas dari kumpulan data LAION sebanyak 20 juta, 768 dimensi dengan bidang kunci yang ditetapkan sebagai kunci pengelompokan. Setelah pemadatan clustering dipicu dalam koleksi, pencarian secara bersamaan dikirim hingga penggunaan CPU mencapai level tertinggi.

Filter Pencarian Rasio Pemangkasan Latensi (ms) QPS (permintaan / s)
Rata-rata Min Maks Median TP99
Tidak ada 0% 1685 672 2294 1710 2291 17.75
kunci > 200 dan kunci < 800 40.2% 1045 47 1828 1085 1617 28.38
kunci > 200 dan kunci < 600 59.8% 829 45 1483 882 1303 35.78
kunci > 200 dan kunci < 400 79.5% 550 100 985 584 898 54.00
kunci == 1000 99% 68 24 1273 70 246 431.41

Ketika rentang pencarian menyempit dalam filter pencarian, rasio pemangkasan meningkat. Ini berarti lebih banyak entitas yang dilewati selama proses pencarian. Ketika membandingkan statistik di baris pertama dan terakhir, Anda dapat melihat bahwa pencarian tanpa pemadatan pengelompokan memerlukan pemindaian seluruh koleksi. Di sisi lain, pencarian dengan pemadatan pengelompokan menggunakan kunci tertentu dapat mencapai peningkatan hingga 25 kali lipat.

Praktik terbaik

Berikut ini beberapa kiat agar Anda dapat menggunakan pemadatan pengelompokan secara efisien:

  • Aktifkan ini untuk koleksi dengan volume data yang besar. Performa pencarian meningkat dengan volume data yang lebih besar dalam koleksi. Ini adalah pilihan yang baik untuk mengaktifkan fitur ini untuk koleksi dengan lebih dari 1 juta entitas.

  • Pilih kunci pengelompokan yang tepat: Anda dapat menggunakan bidang skalar yang biasa digunakan sebagai kondisi pemfilteran sebagai kunci pengelompokan. Untuk koleksi yang menyimpan data dari beberapa penyewa, Anda dapat menggunakan bidang yang membedakan satu penyewa dengan penyewa lainnya sebagai kunci pengelompokan.

  • Gunakan kunci partisi sebagai kunci pengelompokan. Anda dapat mengatur common.usePartitionKeyAsClusteringKey ke true jika Anda ingin mengaktifkan fitur ini untuk semua koleksi di instance Milvus Anda atau jika Anda masih menghadapi masalah kinerja dalam koleksi besar dengan kunci partisi. Dengan demikian, Anda akan memiliki kunci pengelompokan dan kunci partisi ketika Anda memilih sebuah field skalar dalam koleksi sebagai kunci partisi.

    Perhatikan bahwa pengaturan ini tidak menghalangi Anda untuk memilih bidang skalar lain sebagai kunci pengelompokan. Kunci pengelompokan yang ditetapkan secara eksplisit selalu diutamakan.

Coba Milvus yang Dikelola secara Gratis

Zilliz Cloud bebas masalah, didukung oleh Milvus dan 10x lebih cepat.

Mulai
Umpan balik

Apakah halaman ini bermanfaat?